「浏览器」gRPC和RSocket之间的区别


「浏览器」gRPC和RSocket之间的区别
本文插图
我们一直被问到这个问题 。通常 , gRPC和RSocket尝试解决不同的问题 。gRPC是使用HTTP / 2的RPC框架 。RSocket是较低级别的消息传递网络层 。因此 , 开发人员将直接使用RSocket进行低级交互 , 并可以选择使用RSocket-RPC作为位于RSocket之上的易于使用的RPC层 。
现在 , 让我们更具体地看一下gRPC和RSocket之间的区别 。
OSI层 【「浏览器」gRPC和RSocket之间的区别】gRPC和RSocket位于堆栈的不同层 。gRPC位于OSI层7上-在HTTP / 2之上构建的RPC层 。RSocket是OSI 5/6层 , 可通过网络对响应流语义进行建模 。反应性流提供了一种使用反压对异步流进行建模的方法 。在10,000英尺的视野中 , 您将使用RSocket来构建gRPC之类的东西(例如RSocket-RPC) , 该东西将位于OSI(应用程序)层7 。
协议 gRPC不是传统意义上的协议 。它由HTTP / 2标头 , 生成的代码和protobuf中的约定组成 。跨网络传输的内容中没有足够的信息来确定正在发生的事情 。例如 , 如果protobuf中存在不匹配项 , 则gRPC可以通过一元调用来调用流 。gRPC设计类似于Web服务 。
RSocket是具有正式定义的5/6层二进制协议 。您无需生成代码来确定RSocket发生了什么—您只需了解协议即可 。
有效载荷 对于您要发送的有效载荷 , gRPC持谨慎态度-出于所有意图和目的 , 它都是protobuf 。
RSocket不自觉 , 允许您发送不透明字节 。
优点 发送字节更加灵活 , 因为您不必定义用于发送数据的协议 。RSocket可用于传输数据库查询 , 就像传输图片一样容易 。
网络传输 gRPC旨在与HTTP / 2语义一起使用 。如果要通过其他传输方式发送它 , 则必须模仿HTTP / 2语义 。在整个网络中 , 它有效地绑定到HTTP / 2和TCP 。
RSocket只需要一个双工连接即可发送和接收字节 。这可以是TCP , 文件 , WebSockets等 。 在RSocket中 , 很容易通过WebSockets从浏览器接收调用 , 然后使用TCP调用服务器 。交互将感觉透明 , 并且与开发人员相同 。
浏览器支持 gRPC在Web浏览器中不起作用 。Web浏览器的支持要求生成和部署其他代码 。
RSocket通过Websockets在Web浏览器中工作 。不需要任何新代码-只需启动一个接受WebSocket连接的RSocket服务器即可 。
客户端/服务器交互 gRPC具有传统的客户端/服务器模型 , 因为它基于HTTP / 2和RPC语义 。在gRPC中 , 客户端连接到服务器 , 但是服务器无法调用客户端 。此外 , 由于gRPC是RPC层 , 因此您只能进行在protobuf文件中定义的调用 。
RSocket在传统的HTTP意义上没有客户端服务器交互 。在RSocket中 , 一旦客户端连接到服务器 , 它们都可以成为请求者和响应者 。这意味着在连接后 , RSocket是全双工的 , 并且服务器的请求者可以发起对客户端请求者的调用 , 即 , 服务器一旦连接就可以对Web浏览器进行调用 。
流量控制 gRPC的流控制是基于字节的 , 因为它最终是HTTP / 2流控制 。它没有应用程序流控制的概念 , 因为它不会在参与者之间使用此信息发送消息 。HTTP / 2流控制具有有限的价值 , 因为TCP还提供字节级流控制 。
RSocket的流控制是应用程序级流控制 。这取决于收件人可以处理多少条消息 。RSocket具有一个REQUEST_N帧 , 在请求多个消息的参与者之间共享 。处理完这些消息后 , 它将请求更多消息 。这与基础传输字节级流控制无关 。这意味着 , 如果服务速度变慢 , 它可能会在网络缓冲区已满之前减慢消息数量 。此信息在服务之间传播 。
取消订单 在gRPC中 , 取消通常只从客户端到服务器 。仅当序列不完整时 , 服务器才应发送取消消息 。