关于 IPC & RPC - 一图胜千言

2016-06-04 11:27:07 +08:00
 alexapollo

传送门: http://www.anwcl.com/wordpress/ipc-rpc/

如图,各个部分都可以简单抽象出来

如JSON-RPC,是RPC-SOCKET-JSON的组合

有一些技术如信号量、队列(linux)、文件锁没有放进来,但广义上它们也是IPC的一部分。

6477 次点击
所在节点    程序员
20 条回复
alexapollo
2016-06-04 11:52:36 +08:00
果然没有 argue 就没有人气吗?
Scala 是最好的语言?
finian
2016-06-04 13:53:18 +08:00
你这个分类(分层)完全没有逻辑性。。。为毛 HTTP 和 JSON 会分在一起?同是数据序列化协议的 JSON 和 PB ,为什么采用二进制的就算底层?
neoblackcap
2016-06-04 15:22:57 +08:00
主要是我感觉完全看不懂你的图,左右对照的分别是什么,若是实现跟协议,那么最后为什么来个 RPC 跟 IPC 放在一起的格子。
还有这个上到下的顺序是什么? HTTP 上层? Protobuf 底层? HTTP 又不建立于 Protobuf 之上,何来 HTTP 更上层一说。
dgkae
2016-06-04 15:25:25 +08:00
不错~
alexapollo
2016-06-04 16:51:52 +08:00
@finian JSON 、 HTTP 、 XML 都是文本协议,解析效率很低,而且一般也用在比较高的协议层级(如基于 HTTP ),做通用通信;
而 binary 、 protobuf 这种二进制协议,一般是只能用在特定的一套体系内、不通用的、底层的,所以分开了。
有其他更好表达这两类区别的方法吗?
alexapollo
2016-06-04 16:55:29 +08:00
@neoblackcap 左右不是对照的,但可以组合,协议的底层和高层是切分两类协议,没有依赖关系
neoblackcap
2016-06-04 18:38:07 +08:00
@alexapollo 讲道理的话我觉得你应该参照 TCP 协议栈来画图,而且 protobuf 就是二进制协议了,二进制协议根本就已经囊括了 protobuf 。一般来说我们会认为不经过解析之后就没法让人阅读的协议为二进制协议。

协议根本没什么跨体系通用一说,你只要协议相同的自然能相同。你说的 JSON 通用,只不过是支持这一数据格式的服务更多罢了。

还有就是你的图若是没有什么对照的话请不要将中线加粗,真的很容易让人误解。
yangmls
2016-06-04 19:10:25 +08:00
这是什么鬼。。。

二进制和文本哪有什么高低之分,看来你不知道怎么用 http 1.x 的 payload 来传输 protobuf 。。。而且这图根本无法解释 http 2 这种上面跑文本,底层却跑二进制的协议
alexapollo
2016-06-04 19:32:50 +08:00
@neoblackcap 对。但不同协议应用的场景比较不同,你见过跨系统的通用 protobuf 传输吗?
protobuf 本身有一些依赖,如定义好的协议结构,而且只要对 protobuf 本身有微小的修改就很容易导致不兼容,但 JSON 、 XML 、 HTTP 却很通用,序列化和反序列化是通用的。

二进制一般来说比较偏向共享内存、预定义结构这种场景。。跟 protobuf 比没有序列化和反序列化的过程。 protobuf 就是整合了不同语言,但会有额外的开销,还是不同的。

@yangmls 速度差距比较大。。
alexapollo
2016-06-04 19:34:11 +08:00
@neoblackcap 参考协议栈画图也可以。。会清晰一点。但就很难说清楚这几者之间的区别了。
neoblackcap
2016-06-04 19:49:04 +08:00
@alexapollo 你那根本就是伪逻辑,若是系统中通用 protobuf 你就认为这些是一个系统,若是换成 json 你就认为他们是不同的系统,这样根本没法说。

而且你的 JSON , XML , HTTP 是什么鬼?若是 XML 也可以勉强说是数据格式, HTTP 跟它并列是什么意思。 HTTP 根本不管你这些好不好,别人是『超文本传输协议』,若是 HTTP 也算的话,那么 FTP 也应该算是。
alexapollo
2016-06-04 20:05:32 +08:00
@neoblackcap 恩,后者是笔误,应该是 HTML

你那根本就是伪逻辑,若是系统中通用 protobuf 你就认为这些是一个系统,若是换成 json 你就认为他们是不同的系统,这样根本没法说。
> 你这说反了吧,就像我们说语言有高级低级之分,高级语言当然也能干低级的事,但低级语言很多时候就干不了高级的活,或者说,代价很大
neoblackcap
2016-06-04 20:47:34 +08:00
@alexapollo protobuf 我能想到就是解析快,传输小, json 就是人可阅读。
若是可以的话,我希望你能说出一些 json 能做,而 protobuf 不能做的,请千万不要说 json 能加字段而不报错。因为别人本身就是 schema 的, json 也是有 json-schema 的,但是大概用得人比较少。
alexapollo
2016-06-04 20:51:49 +08:00
@neoblackcap 未知协议格式, json 可以被解析,而 protobuf 不行

难不成目前有 protobuf 自动解析的方法?我还真不知道
9hills
2016-06-04 21:01:16 +08:00
这张图实在是看不懂逻辑。。。是我太愚钝了
dphdjy
2016-06-04 21:08:45 +08:00
@alexapollo keywords : protobuf DynamicMessage
josephshen
2016-06-04 23:57:07 +08:00
瞎写乱画
Mirana
2016-06-05 00:58:25 +08:00
http 是传输协议, json xml protobuf 是序列化的协议,不管用什么序列化数据,最后传输的都是二进制的数据。
mengzhuo
2016-06-05 09:40:12 +08:00
这都什么玩意啊……别误人子弟好么
http 竟然算高层?
pb 和 json 本质上没有区别啊!
yuantops
2016-06-05 19:21:43 +08:00
http 居然和 JSON 并列在一起,恍惚间理论体系崩坏的感觉。

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

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

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

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

© 2021 V2EX