在gRPC中,客户端应用程序可以直接调用另一台机器上的服务器应用程序上的方法,就像它是本地对象一样,使您可以更轻松地创建分布式应用程序和服务。与许多RPC系统一样,gRPC基于定义服务的思想,指定可以使用其参数和返回类型远程调用的方法。在服务器端,服务器实现此接口并运行gRPC服务器来处理客户端调用。在客户端,客户端有一个存根,它提供与服务器完全相同的方法。
上面的段落讨论了客户端和服务器,前者是向另一个调用方法的人。我想知道的是:连接的服务器端是否可以调用已在客户端注册的方法?
答案 0 :(得分:1)
您可以做的是在两个进程中启动HTTP服务器,并使用每端的客户端来启动通信。有一些涉及的样板,你必须设计一个简单的握手协议(一端向另一端注册,宣传其监听地址),但这不是太多的工作。
答案 1 :(得分:1)
协议没有实现它,但是您可以假装这种情况。
定义返回ServerRequest
消息流的服务器方法:
import "google/protobuf/any.proto";
service FullDuplex {
rpc WaitRequests (google.protobuf.Any) returns (stream ServerRequest);
}
message ServerRequest {
float someValue = 1;
float anotherAnother = 1;
}
ServerRequest
可能是Oneof
,因此您可能会收到不同类型的服务器请求。
如果需要客户端为每个请求发送回响应,则可以创建从客户端到服务器的流,但是您将需要在服务器端实现一个逻辑,该逻辑触发等待该响应的超时。
service FullDuplex {
rpc WaitRequests (stream ClientResponse) returns (stream ServerRequest);
}