请问 RPC 通信的实现?

2017-03-10 18:01:51 +08:00
 checgg

例如 Motan , Dubbo , rpcx,gRPC,thrift 等等 RPC 框架。

最近对 RPC 有诸多疑问,想问问大家有关于 RPC 实现的几个疑问?

1 大多数 RPC 框架在传输层是基于什么协议实现的?(TCP 协议或者是框架自己的协议?)

2 上面的 RPC 框架应该性能是明显优于普通 HTTP 协议的,为什么有的公司会选择将 HTTP 作为 RPC 的调用协议?这是出于什么考虑,纯粹为了简单吗?

这里有个实测比较: https://cnodejs.org/topic/553a1cad63b7692e48bbb715

2114 次点击
所在节点    问与答
6 条回复
misaka19000
2017-03-10 18:56:58 +08:00
应该基本上都是是 TCP/IP ,谁闲着没事干自己搞一套通信协议啊
RPC 显然是效率高啊,但是麻烦嘛, HTTP 的优点就是简单,并且不管什么语言都很容易使用。
domty
2017-03-10 19:03:32 +08:00
gRpc 我记得是基于 Http2 的, rpc 的协议理论上不可能不考虑传输性能的。

在 Http 协议如果能满足传输性能的要求的话其实无所谓。
而且 http 协议还有一个有点,更便于直接向 App 等客户端提供服务。
wc951
2017-03-10 20:02:51 +08:00
用 http 是因为比较通用,方便跨语言吧,不需要额外的实现
checgg
2017-03-10 20:16:30 +08:00
看来大家的看法 HTTP 就是为了“简单”“易用”了。

V2E 上至少还有人回答,谢谢大家。
@checgg @domty @wc951
juxingzhutou
2017-03-10 20:27:48 +08:00
gRPC 的话底层是基于 HTTP 的,在 HTTP 这层上效率是一样的,但是它使用了 protobuf 作为序列化反序列化的工具,所以可以比一般的 json 报文更小,提升了传输效率。

RPC 框架首先一点就是性能上会做一些优化,更重要的一点是 RPC 框架一般使用中间语言定义接口,这样有利于前后端协作、并行开发,并且也省去了前后各端的接口封装,直接可以通过接口定义文件生成各个语言的接口实现文件。而且在文档格式要求不高的情况下,接口定义文件加上一些注释就可以是一份很好的接口文档,节省了很多额外的工作。
helloworldwt
2017-03-11 14:05:08 +08:00
Dubbo 和 Thrift 底层都是 socket 通信

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

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

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

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

© 2021 V2EX