开发者社区> 问答> 正文

请教一下, 单纯的Protobuf只能直接实现序列化,而不能直接实现RPC吗?

已解决

maven 引入Protobuf core,
只能直接用来序列化和反序列化吗, 而不能直接实现RPC ????

比如像Avro那样直接使用对应的实现类,Avro实现TCP的就使用 SocketServer和SocketTransceiver
Protobuf怎么实现???
跪谢

展开
收起
期待l 2019-01-07 12:37:41 3253 0
4 条回答
写回答
取消 提交回答
  • 采纳回答

    Protobuf只是将所有字段按序序列化成出来,序列化结果里没有消息类型和整个消息长度的标识。
    做RPC的协议一般消息都是由消息类型、消息长度和消息体组成的,这样便于反序列出(识别)不同类型的消息和处理。
    比如通过消息头的消息类型就可能很快找到对应的反序列化类,再读取指定长度的消息体就可以反序列化结果了。
    比如需要检查每个消息体的大小防止恶意的消息交互,毕竟有坏人可能给你发一个超出你Xmx的消息,解析一下就OOM了。。

    如果你的场景里,客户端-服务端交互的消息类型只有一种,那么可以直接使用Protobuf做序列化和反序列化工具。

    需要RPC的场景,除了grpc外,还可以考虑protostuff,详情见 https://github.com/protostuff/protostuff

    2019-07-17 23:24:44
    赞同 1 展开评论 打赏
  • 只有序列化过程没有传输与协议层面,无法实现 rpc 的哦

    2019-07-17 23:24:44
    赞同 展开评论 打赏
  • protobuf是做的打包解包的工作,要做rpc,接口定义,服务寻址,通信协议等等工作都是需要的,对象的序列化(打包解包)只是其中很小一部分,常见的rpc框架有hessian,阿里也有开源框架dubbo可以参考

    2019-07-17 23:24:44
    赞同 展开评论 打赏
  • 世界的模样,在于你看它的角度...

    在钉钉群中已经有一位大哥帮我回答了 ,总结一下

    Google的Protobuf只有实现了序列化的功能, 需要实现RPC只能去用grpc或者别的rpc框架

    恩...就是这样

    2019-07-17 23:24:44
    赞同 1 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载