socket,protobuf,rpc之间的理解

之前有篇博文讲解了prc和socket的区别,但是仅仅是从用户实现角度来判断的,这几天在学习了brpc之后,在这三者的层次上又有了更深刻的理解,这里对这三者的比较在做一个简单的小节。

1、三者的定义
socket

套接字,与底层TCP/IP网络协议栈打交道的对象,直接利用socket进行通信的,类似传统的TCP/UDP的通信,这种通信是以数据流的形式进行交换的,也就是我们称为的二进制数据。
那么当CS两端取得数据之后,也是由二进制数据,至于读出来的数据具体代表什么,需要用户自己去完成。

protobuf

google开源的一种序列化和反序列化工具,这个工具就是用户可以自己定义不同的数据类型,然后通过这个工具将不同数据类型转换为二进制,实际是一种编码的过程,然后通过网络传统,同样可以进行反序列化,得到用户自己定义的不同数据类型的数据。但是它只是一种数据序列化和反序列化的工具,对于序列化或者反序列化的数据有什么含义,具体做什么这些都不知道。

rpc

远程调用框架,从本质上来说是一种框架,或者叫一种方法,通过这种方法可以访问远端机器上的进程或者服务,它其实底层是由上述的这几层来完成的,但是需要注意的是,因为在rpc调用过程中我们还需要定义更上层的数据协议,例如数据包有哪些组成,调用过程中的参数,返回值,堆栈信息等等这些,以及在多线程的调用,会不会出现这些阻塞现象,这些都需要额外的协议去封装,所以一般的rpc会在序列化工具(例如:protobuf)基础上进行封装一层用户自定义的协议,百度就是baidu-std。通过这个协议来完成rpc的功能。

2.分层理解

这里给出了自己理解的关于rpc的分层模型,以百度开源的brpc为例
在这里插入图片描述
注意:baidu-std只是其中的一种封装的协议,其实还有很多其他的协议,也可以自己定义,当然现在web服务上比较公有的就是http的协议解析。

3.rpc用处

rpc的用处显而易见,对于分布式编程来说rpc都是不可缺少的,只要使用的rpc调用的好,就可以像调用本地的进程一样方便。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值