RPC是应用层协议,HTTP也是应用层协议,RPC可以基于HTTP也可以基于TCP,一般是TCP,更轻量,安全。GRPC基于http2,应为更方便支持多语言。
只有二进制数据才能在网络传输,所以需要将数据根据协议序列化成二进制,一般特定字符串,如json格式,xml,字符串能在网络中被双方机器直接编解码。
设置好数据边界,TCP的特性就是粘包,数据边界处理是应用层的事情,也就是设计协议需要考虑的。
1.http是无状态的,而rpc是有请求上下文,请求后需要阻塞等待服务提供方把数据返回。而http响应与否得看服务端靠不靠谱。 2.http本身协议很多字段,徒增无用字段大大增加了复杂性,性能低下,RPC是应用间通信,性能要求高,所以通常会设计紧凑的私有协议
以 Dubbo 为例,消费者发送请求时,使用 AtomicLong 自增,产生一个 消息 ID。由于 Dubbo 底层 IO 操作是异步的,Dubbo 发送请求之后,需要阻塞等待消费者返回信息。消费者会将消息 ID 保存到 Map 结构中,。为了保证请求响应可以一一对应,这就需要提供者返回的响应信息带上请求者消息 ID。 通过响应的消息 ID,通过 上面提到 Map 存储数据,就能找到对应的请求
本文作者:yowayimono
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!