温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何进行Yar并行的RPC框架使用分析

发布时间:2022-01-06 18:28:23 来源:亿速云 阅读:183 作者:柒染 栏目:云计算

今天就跟大家聊聊有关如何进行Yar并行的RPC框架使用分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

前言:

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框架使用分析

看完上述内容,你们对如何进行Yar并行的RPC框架使用分析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI