传送门: http://www.anwcl.com/wordpress/ipc-rpc/
如图,各个部分都可以简单抽象出来
如JSON-RPC,是RPC-SOCKET-JSON的组合
有一些技术如信号量、队列(linux)、文件锁没有放进来,但广义上它们也是IPC的一部分。
1
alexapollo OP 果然没有 argue 就没有人气吗?
Scala 是最好的语言? |
2
finian 2016-06-04 13:53:18 +08:00
你这个分类(分层)完全没有逻辑性。。。为毛 HTTP 和 JSON 会分在一起?同是数据序列化协议的 JSON 和 PB ,为什么采用二进制的就算底层?
|
3
neoblackcap 2016-06-04 15:22:57 +08:00
主要是我感觉完全看不懂你的图,左右对照的分别是什么,若是实现跟协议,那么最后为什么来个 RPC 跟 IPC 放在一起的格子。
还有这个上到下的顺序是什么? HTTP 上层? Protobuf 底层? HTTP 又不建立于 Protobuf 之上,何来 HTTP 更上层一说。 |
4
dgkae 2016-06-04 15:25:25 +08:00
不错~
|
5
alexapollo OP @finian JSON 、 HTTP 、 XML 都是文本协议,解析效率很低,而且一般也用在比较高的协议层级(如基于 HTTP ),做通用通信;
而 binary 、 protobuf 这种二进制协议,一般是只能用在特定的一套体系内、不通用的、底层的,所以分开了。 有其他更好表达这两类区别的方法吗? |
6
alexapollo OP @neoblackcap 左右不是对照的,但可以组合,协议的底层和高层是切分两类协议,没有依赖关系
|
7
neoblackcap 2016-06-04 18:38:07 +08:00
@alexapollo 讲道理的话我觉得你应该参照 TCP 协议栈来画图,而且 protobuf 就是二进制协议了,二进制协议根本就已经囊括了 protobuf 。一般来说我们会认为不经过解析之后就没法让人阅读的协议为二进制协议。
协议根本没什么跨体系通用一说,你只要协议相同的自然能相同。你说的 JSON 通用,只不过是支持这一数据格式的服务更多罢了。 还有就是你的图若是没有什么对照的话请不要将中线加粗,真的很容易让人误解。 |
8
yangmls 2016-06-04 19:10:25 +08:00
这是什么鬼。。。
二进制和文本哪有什么高低之分,看来你不知道怎么用 http 1.x 的 payload 来传输 protobuf 。。。而且这图根本无法解释 http 2 这种上面跑文本,底层却跑二进制的协议 |
9
alexapollo OP @neoblackcap 对。但不同协议应用的场景比较不同,你见过跨系统的通用 protobuf 传输吗?
protobuf 本身有一些依赖,如定义好的协议结构,而且只要对 protobuf 本身有微小的修改就很容易导致不兼容,但 JSON 、 XML 、 HTTP 却很通用,序列化和反序列化是通用的。 二进制一般来说比较偏向共享内存、预定义结构这种场景。。跟 protobuf 比没有序列化和反序列化的过程。 protobuf 就是整合了不同语言,但会有额外的开销,还是不同的。 @yangmls 速度差距比较大。。 |
10
alexapollo OP @neoblackcap 参考协议栈画图也可以。。会清晰一点。但就很难说清楚这几者之间的区别了。
|
11
neoblackcap 2016-06-04 19:49:04 +08:00
@alexapollo 你那根本就是伪逻辑,若是系统中通用 protobuf 你就认为这些是一个系统,若是换成 json 你就认为他们是不同的系统,这样根本没法说。
而且你的 JSON , XML , HTTP 是什么鬼?若是 XML 也可以勉强说是数据格式, HTTP 跟它并列是什么意思。 HTTP 根本不管你这些好不好,别人是『超文本传输协议』,若是 HTTP 也算的话,那么 FTP 也应该算是。 |
12
alexapollo OP @neoblackcap 恩,后者是笔误,应该是 HTML
你那根本就是伪逻辑,若是系统中通用 protobuf 你就认为这些是一个系统,若是换成 json 你就认为他们是不同的系统,这样根本没法说。 > 你这说反了吧,就像我们说语言有高级低级之分,高级语言当然也能干低级的事,但低级语言很多时候就干不了高级的活,或者说,代价很大 |
13
neoblackcap 2016-06-04 20:47:34 +08:00
@alexapollo protobuf 我能想到就是解析快,传输小, json 就是人可阅读。
若是可以的话,我希望你能说出一些 json 能做,而 protobuf 不能做的,请千万不要说 json 能加字段而不报错。因为别人本身就是 schema 的, json 也是有 json-schema 的,但是大概用得人比较少。 |
14
alexapollo OP |
15
9hills 2016-06-04 21:01:16 +08:00 via iPhone
这张图实在是看不懂逻辑。。。是我太愚钝了
|
16
dphdjy 2016-06-04 21:08:45 +08:00 via Android
@alexapollo keywords : protobuf DynamicMessage
|
17
josephshen 2016-06-04 23:57:07 +08:00 via iPhone
瞎写乱画
|
18
Mirana 2016-06-05 00:58:25 +08:00 via iPhone
http 是传输协议, json xml protobuf 是序列化的协议,不管用什么序列化数据,最后传输的都是二进制的数据。
|
19
mengzhuo 2016-06-05 09:40:12 +08:00 via iPhone
这都什么玩意啊……别误人子弟好么
http 竟然算高层? pb 和 json 本质上没有区别啊! |
20
yuantops 2016-06-05 19:21:43 +08:00
http 居然和 JSON 并列在一起,恍惚间理论体系崩坏的感觉。
|