首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
宝塔
V2EX  ›  PHP

你真的了解 RPC 吗?

  •  
  •   tanszhe · 326 天前 · 1969 次点击
    这是一个创建于 326 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现微服务盛行,服务之间通信大概就两种方式ApiRpc。 下面两个列子来让你了解ApiRpc的区别。

    列子一 文章的增删改查。

    Api 实现:

    
    Router::get('/article/{id}','[email protected]');
    Router::post('/article','[email protected]');
    Router::put('/article/{id}','[email protected]');
    Router::delete('/article/{id}','[email protected]');
    
    
    
    

    然后在控制器Article调用模型

    
    return Article::find($id)->toArray();
    
    

    Rpc 实现

    
    RpcServer::add('Article');
    
    

    没错就一行代码

    列子二 计算器

    假如机器 A 上面一个计算器 Counter,以 Rpc 的方式提供给其他机器使用.

    计算器Counter代码

    
    class Counter
    {
    
        private $i = 0;
    
        public function __construct($i = 0)
        {
            $this->i = $i;
        }
    
        // 加法
        public function add($v)
        {
            $this->i += $v;
            return $this;
        }
    
        // 减法
        public function sub($v)
        {
            $this->i -= $v;
            return $this;
        }
    
        // 乘法
        public function mul($v)
        {
            $this->i *= $v;
            return $this;
        }
    
        // 除法
        public function div($v)
        {
            $this->i /= $v;
            return $this;
        }
    
        // 获取结果
        public function get()
        {
            return $this->i;
        }
    }
    
    

    Rpc 实现

    
    RpcServer::add('Counter');
    
    

    Rpc 客户端调用

    
    $c = new ClientCounter(10);
    echo $c->add(3)->mul(2)->sub(10)->div(5)->get();
    
    

    Api 实现:

    你觉得 Api 应该怎么实现?

    以上代码是我在设计 one框架的一些思考?

    如你喜欢请 star https://github.com/lizhichao/one

    如其他观点,欢迎留言讨论.

    7 回复  |  直到 2019-01-04 13:09:48 +08:00
        1
    OMGZui   326 天前
    各有优劣吧,目前 API 更热门

    https://www.zhihu.com/question/28570307
        2
    tanszhe   326 天前
    @OMGZui 看很多文章总喜欢把 tpc http 传输协议扯进来,api 和 rpc 都可以利用这些协程传输。
    还有打包方式 文本格式二进制格式 api 和 rpc 都可以使用。和传输协议 打包方式无关。
        3
    zarte   326 天前
    不了解 rpc,但是第一个的 rpc 栗子你省略了其他代码吧要不然怎么区分不同方法。
        4
    tanszhe   326 天前
    @zarte 没有省略,服务器端确实就拿一行就好了。把·article·模型提供出来就可以。客户端就可以直接使用这个模型
        5
    realpg   326 天前
    不说 RPC 协议实现 消息报文格式 就教一个高级语言怎么调用?

    网络层出了问题怎么调试?
        6
    tanszhe   326 天前
    @realpg 你可去看 one 框架文档,任何语言均可调用。
        7
    hubqin   315 天前 via Android
    最近也正要搞 rpc,微服务架构,用 thrift 来写通讯接口语言(IDL),还没入门。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2906 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 10:30 · PVG 18:30 · LAX 02:30 · JFK 05:30
    ♥ Do have faith in what you're doing.