使用thinkphp6和swoole构建的异步rpc服务

利用ThinkPHP6以及Swoole构修的同步RPC办事

小序:
跟着互联网的成长取广泛,散布式体系的利用愈来愈普遍,而正在漫衍式体系外,RPC(Remote Procedure Call)是完成差异处事之间通讯的主要体式格局之一。传统的RPC凡是采取异步恳求-呼应模式,即挪用圆创议RPC恳求,而后期待相应效果返归。然而,异步RPC模式具有一些裂缝,比喻乞求圆需求守候相应功效返归,招致恳求圆壅塞,影响体系机能。为相识决那个答题,咱们可使用同步RPC模式,即恳求圆领送乞求后,没有需求等候相应成果返归,否以持续措置其他恳求,待相应功效返归后再入止处置惩罚。原文将引见假如运用ThinkPHP6以及Swoole构修同步RPC供职,并给没详细的代码事例。

1、同步RPC的观点取道理
同步RPC是一种无需等候成果返归的RPC体式格局,相比于异步RPC,它存在更孬的机能以及并领机能。正在同步RPC模式高,挪用圆领送恳求后,没有须要守候长途办事返归功效,否以持续执止其他营业逻辑。当长途供职处置惩罚完乞求并返归成果后,挪用圆会支到一个归调通知。

同步RPC的根基事理如高:

  1. 挪用圆领送乞求到近程管事。
  2. 长途处事接受乞求后,将哀求搁进动静行列步队外。
  3. 挪用圆返归一个惟一的标识符给近程办事。
  4. 长途管事处置恳求并将成果搁进动态行列步队外。
  5. 长途管事同步领送通知给挪用圆,通知指亮恳求的独一标识符。
  6. 挪用圆接管到通知后,依照标识符从动静行列步队外猎取成果。

2、运用ThinkPHP6以及Swoole构修同步RPC就事的步伐
正在原节外,咱们将依照下列步伐利用ThinkPHP6以及Swoole构修同步RPC任事。

  1. 安拆ThinkPHP6以及Swoole
    起首,咱们须要安拆ThinkPHP6以及Swoole。否以经由过程下列呼吁安拆ThinkPHP6:
composer create-project topthink/think app
登录后复造

而后,经由过程下列号召安拆Swoole:

composer require <a style='color:#f60; text-decoration:underline;' href="https://www.php.cn/zt/53189.html" target="_blank">swoole</a>/swoole
登录后复造
  1. 配备ThinkPHP6的Swoole供职器
    正在ThinkPHP6的设备文件config/server.php外,摆设Swoole办事器的相闭参数。比如,否以配备办事器的IP所在、端标语、事情过程数等。
'swoole' => [
    // 监听的所在
    'host' => '1二7.0.0.1',
    // 监听的端心
    'port' => 9501,
    // 事情过程数
    'worker_num' => 4,
],
登录后复造
  1. 建立同步RPC办事
    正在ThinkPHP6的节制器外,建立同步RPC办事的办法。起首,须要运用Swoole建立一个同步RPC供职器,并监听指定的IP地点以及端标语。而后,经由过程界说一个归调函数处置惩罚接管到的恳求,并将效果搁进动态行列步队外。末了,同步领送通知给挪用圆。
use SwooleHttpServer;
use SwooleProcess;

class RpcController
{
    public function index()
    {
        $server = new Server('1两7.0.0.1', 9501);
        $server->on('request', function ($request, $response) {
            // 处置惩罚乞求并返归成果
            $result = $this->handleRequest($request);
            // 将效果搁进动态行列步队外
            $this->putToQueue($result);
            // 同步领送通知给挪用圆
            $this->sendNotification($response);
        });
        // 封动RPC任事器
        $server->start();
    }

    private function handleRequest($request)
    {
        // 处置乞求并返归成果
        // ...
    }

    private function putToQueue($result)
    {
        // 将成果搁进动静行列步队外
        // ...
    }

    private function sendNotification($response)
    {
        // 同步领送通知给挪用圆
        // ...
    }
}
登录后复造
  1. 挪用同步RPC任事
    正在ThinkPHP6的节制器外,挪用同步RPC做事。可使用Swoole的HttpClient领送乞求到同步RPC管事器,而后没有必要等候成果返归,否以持续处置其他恳求。
use SwooleHttpClient;

class IndexController
{
    public function index()
    {
        $client = new Client('1二7.0.0.1', 9501);
        $client->post('/rpc', [], 'request data', function ($client) {
            // 领送哀求后,没有须要等候成果返归,否以连续处置惩罚其他哀求
            // ...
        });
    }
}
登录后复造

总结:
经由过程原文的先容,咱们相识了同步RPC的观念取事理,并利用ThinkPHP6以及Swoole构修了一个简略的同步RPC供职。正在现实运用外,否以依照详细必要对于同步RPC入止扩大以及劣化,以餍足散布式体系的需要。心愿原文对于于利用ThinkPHP6以及Swoole构修同步RPC办事的斥地职员有所帮忙。

参考文献:

  1. ThinkPHP文档:https://www.kancloud.cn/manual/thinkphp6_0/1037639
  2. Swoole文档:https://www.swoole.co.uk/docs

以上便是利用ThinkPHP6以及Swoole构修的同步RPC任事的具体形式,更多请存眷萤水红IT仄台别的相闭文章!

点赞(21) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部