你真的了解 RPC 吗?

2018-12-24 11:04:35 +08:00
 tanszhe

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

列子一 文章的增删改查。

Api 实现:


Router::get('/article/{id}','ArticleController@get');
Router::post('/article','ArticleController@create');
Router::put('/article/{id}','ArticleController@edit');
Router::delete('/article/{id}','ArticleController@delete');



然后在控制器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

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

3993 次点击
所在节点    PHP
7 条回复
OMGZui
2018-12-24 11:11:55 +08:00
各有优劣吧,目前 API 更热门

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

网络层出了问题怎么调试?
tanszhe
2018-12-24 12:41:49 +08:00
@realpg 你可去看 one 框架文档,任何语言均可调用。
hubqin
2019-01-04 13:09:48 +08:00
最近也正要搞 rpc,微服务架构,用 thrift 来写通讯接口语言(IDL),还没入门。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/520374

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX