现微服务盛行,服务之间通信大概就两种方式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
不了解 rpc,但是第一个的 rpc 栗子你省略了其他代码吧要不然怎么区分不同方法。
|
4
tanszhe OP @zarte 没有省略,服务器端确实就拿一行就好了。把·article·模型提供出来就可以。客户端就可以直接使用这个模型
|
5
realpg 2018-12-24 12:37:26 +08:00
不说 RPC 协议实现 消息报文格式 就教一个高级语言怎么调用?
网络层出了问题怎么调试? |
7
hubqin 2019-01-04 13:09:48 +08:00 via Android
最近也正要搞 rpc,微服务架构,用 thrift 来写通讯接口语言(IDL),还没入门。
|