最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Yar并行的RPC框架的简单使用

    正文概述 转载于:掘金(PHP进阶架构师)   2020-12-14   426

    前言:

    RPC,就是Remote Procedure Call的简称呀,翻译成中文就是远程过程调用

    RPC要解决的两个问题:

    1. 解决分布式系统中,服务之间的调用问题。
    2. 远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑

    如果模仿B/S架构的调用方式,每次调用时,都需要写一串发起http请求的代码。比如new Curl()...之类的,能不能像本地调用一样,去发起远程调用,让使用者感知不到远程调用的过程。

    实际情况下,RPC很少用到http协议来进行数据传输,毕竟我只是想传输一下数据而已,何必动用到一个文本传输的应用层协议。 为什么不直接使用二进制传输。

    安装:

    $ pecl install yar
    $ pecl install msgpack
    

    服务端代码:

    <?php
    
    require_once 'Email.php';
    require_once 'Sms.php';
    
    class Service
    {
        private $sms;
        private $email;
    
        public function __construct()
        {
            $this->sms = new Sms();
            $this->email = new Email();
        }
    
        /**
         * @param $mobile
         * @return string
         */
        public function sendSms($mobile, $content = '短信内容')
        {
            return $this->sms->send($mobile, $content);
        }
    
        /**
         * @param $email
         * @return string
         */
        public function sendEmail($email)
        {
            return $this->email->send($email);
        }
    }
    
    $service = new Yar_Server(new Service());
    $service->handle();
    

    客户端代码:

    <?php
    
    // 一、直接调用
    //$client = new Yar_Client("http://192.168.2.138/api/");
    //$client->SetOpt(YAR_OPT_CONNECT_TIMEOUT, 1000);
    //$result = $client->sendSms('18234065200', '我是短信内容');
    //echo $result;
    
    // 二、并行调用
    // public static call ( string $uri , string $method [, array $parameters [, callable $callback [, callable $error_callback [, array $options ]]]] )
    // callback 回掉函数, 在远程服务的返回到达的时候被Yar调用, 从而可以处理返回内容 如果没有设置则调用loop中的callback
    // error_callback
    // $options
    Yar_Concurrent_Client::call("http://192.168.2.138/api/", "sendSms", ['18234065200', '欢迎注册']);
    Yar_Concurrent_Client::call("http://192.168.2.138/api/", "sendEmail", ['12580@qq.com'], "callback", "callError", [YAR_OPT_TIMEOUT => 10]);
    
    // 发送请求
    // public static loop ([ callable $callback [, callable $error_callback ]] )
    Yar_Concurrent_Client::loop("loopCallback", "loopError");
    
    function callback($retval, $callinfo)
    {
        echo 'call自己的回调:' . $callinfo['method'] . '方法返回数据' . $retval . php_EOL;
    }
    
    // 错误回掉函数, 如果设置了, Yar在发送出所有的请求之后立即调用一次这个回掉函数(此时还没有任何请求返回), 调用的时候$callinfo参数是NULL
    function loopCallback($retval, $callinfo)
    {
        if (is_null($callinfo)) {
            echo '所有rpc请求发送完毕调用' . PHP_EOL;
        } else {
            echo '调用成功后返回' . PHP_EOL;
            var_dump($retval);
            var_dump($callinfo);
        }
    }
    
    // 错误回调
    function callError()
    {
        echo '发送rpc出错' . PHP_EOL;
    }
    
    // 错误回掉函数, 如果设置了, 那么Yar在出错的时候会调用这个回掉函数
    function loopError()
    {
        echo '发送rpc出错' . PHP_EOL;
    }
    

    Yar并行的RPC框架的简单使用

    以上内容希望帮助到大家, 很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家 ,需要戳这里 PHP进阶架构师>>>实战视频、大厂面试文档免费获取


    起源地下载网 » Yar并行的RPC框架的简单使用

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元