现微服务盛行,服务之间通信大概就两种方式Api
和Rpc
。 下面两个列子来让你了解Api
和Rpc
的区别。
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
如其他观点,欢迎留言讨论.
![]() | 1 OMGZui 2018-12-24 11:11:55 +08:00 |
![]() | 2 tanszhe OP @OMGZui 看很多文章总喜欢把 tpc http 传输协议扯进来,api 和 rpc 都可以利用这些协程传输。 还有打包方式 文本格式二进制格式 api 和 rpc 都可以使用。和传输协议 打包方式无关。 |
3 zarte 2018-12-24 11:56:07 +08:00/span> 不了解 rpc,但是第一个的 rpc 栗子你省略了其他代码吧要不然怎么区分不同方法。 |
![]() | 5 realpg PRO 不说 RPC 协议实现 消息报文格式 就教一个高级语言怎么调用? 网络层出了问题怎么调试? |
7 hubqin 2019-01-04 13:09:48 +08:00 via Android 最近也正要搞 rpc,微服务架构,用 thrift 来写通讯接口语言(IDL),还没入门。 |