V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
checgg
V2EX  ›  问与答

请问 RPC 通信的实现?

  •  
  •   checgg · 2017-03-10 18:01:51 +08:00 · 2211 次点击
    这是一个创建于 2800 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

    RPC 框架首先一点就是性能上会做一些优化,更重要的一点是 RPC 框架一般使用中间语言定义接口,这样有利于前后端协作、并行开发,并且也省去了前后各端的接口封装,直接可以通过接口定义文件生成各个语言的接口实现文件。而且在文档格式要求不高的情况下,接口定义文件加上一些注释就可以是一份很好的接口文档,节省了很多额外的工作。
    helloworldwt
        6
    helloworldwt  
       2017-03-11 14:05:08 +08:00
    Dubbo 和 Thrift 底层都是 socket 通信
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   955 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:39 · PVG 04:39 · LAX 12:39 · JFK 15:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.