在gRPC中,客户端应用程序可以直接调用不同计算机上的服务器应用程序上的方法,就像它是本地对象一样,使您可以更轻松地创建分布式应用程序和服务.与许多RPC系统一样,gRPC基于定义服务的思想,指定可以使用其参数和返回类型远程调用的方法.在服务器端,服务器实现此接口并运行gRPC服务器来处理客户端调用.在客户端,客户端有一个存根,它提供与服务器完全相同的方法.
上面的段落讨论了客户端和服务器,前者是向另一个调用方法的人.我想知道的是:连接的服务器端是否可以调用已在客户端注册的方法?
Eri*_*son 13
不,服务器无法在客户端上调用呼叫.gRPC 与 HTTP 一起工作,而HTTP过去没有这样的语义.
已经讨论了实现这种功能的各种方法,但我不知道任何已开始的工作或对设计达成一致意见.gRPC支持双向流,可以为您提供所需的一些功能.通过双向流,客户端可以响应来自服务器的消息,但客户端仍然会调用服务器,并且只能为该呼叫发送一种类型的消息.
协议没有实现它,但你可以假装这种情况。
定义一个返回ServerRequest消息流的服务器方法:
import "google/protobuf/any.proto";
service FullDuplex {
rpc WaitRequests (google.protobuf.Any) returns (stream ServerRequest);
}
message ServerRequest {
float someValue = 1;
float anotherAnother = 1;
}
Run Code Online (Sandbox Code Playgroud)
ServerRequest可能是Oneof,因此您可能会收到不同类型的服务器请求。
如果您需要客户端为每个请求发回响应,您可以创建从客户端到服务器的流,但您需要在服务器端实现一个逻辑,触发等待该响应的超时。
service FullDuplex {
rpc WaitRequests (stream ClientResponse) returns (stream ServerRequest);
}
Run Code Online (Sandbox Code Playgroud)
您可以做的是在两个进程中启动一个 HTTP 服务器,并在每一端使用客户端来发起通信。这涉及到一些样板文件,您必须设计一个简单的握手协议(一端向另一端注册,公布其监听地址),但这并不是太多工作。
| 归档时间: |
|
| 查看次数: |
6089 次 |
| 最近记录: |