首页 > 解决方案 > 我可以用 gRPC 替换基于套接字的协议吗?

问题描述

我正在研究升级旧 TCP 套接字协议的选项,其中任一端都可以启动消息/事务,并且对 gRPC 作为选项很感兴趣。

我的标准是:

从我目前所读到的,gRPC 拥有这一切。但是,我不清楚它是否具有点对点功能。我感兴趣的行为是:

  1. 客户端可以请求信息并向服务器发送命令(支持)
  2. 服务器可以主动向客户端发送更新(支持)
  3. #1 可能在 #2 发生时发生

在我看来,为案例 #2 定义服务器流是可行的。它基本上是一个

// use case 2
rpc SubscribeToEvents(EventsSubscriptionRequest) returns (stream EventDescriptor);

但是,当#2 处于活动状态时,我是否也可以使用案例#1?

// use case 1
rpc GetValue(ValueRequest) returns (ValueResponse);

提前感谢您的帮助和建议。

标签: grpc

解决方案


假设您使用多线程实现,则 #1 和 #2 可以同时使用。

但是,您描述的是客户端-服务器场景,而不是点对点;客户端必须同时启动#1(一元)和#2(流式)RPC。

真正的点对点会让端点实现客户端服务器,这样任何一个点都可以针对另一个点发起(一元和/或流式传输)RPC。


推荐阅读