我可以用gRPC替换基于套接字的协议吗?

问题描述

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

我的标准是:

  • 支持身份验证
  • 第7层(当前实施是第4层)
  • 支持TLS

根据我到目前为止所读的内容,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);

在此先感谢您的帮助和建议。

解决方法

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

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

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

,

您可能希望双方都是客户端和服务器,如另一个答案所示。但是,如果您可以让客户端作为发起连接和流的对象,那么可以在两侧之间使用单个双向流。客户端启动流后,客户端和服务器就可以随时在流上发送消息。