我是gRPC编程的新手。我需要编写一个gRPC客户端,该客户端接收从gRPC服务器发送的文件内容,并将此内容发送到网页。由于文件内容巨大,因此将其设置为流。 下面是我的.proto文件
service LogService {
rpc fetchLogContent(LogRequest) returns (stream LogResponse);
}
message LogRequest {
string ip = 1;
string fileName = 2;
}
message LogResponse {
string ip = 1;
string logContent = 2;
}
现在,在客户端中,当我使用blockingStub访问fetchLogContent时,它将返回一个Iterator。我从grpc.io - java提供的示例中了解到,如果存在响应对象列表(链接中提供的示例中的Feature对象列表),则Iterator将有效。但就我而言,我需要一个LogResponse作为流发送。请为此提供任何建议/替代方案。提前致谢。 :)
答案 0 :(得分:0)
在您的方法定义中:
rpc fetchLogContent(LogRequest) returns (stream LogResponse);
stream
关键字表示您将收到0或更多LogResponse消息。如果内容很大,您可以做的是读取文件块(例如4kb),然后发送多个LogResponse消息,每个消息都包含文件的一部分。客户端可以重复读取这些块,然后将它们拼凑在一起。
由于ip
字段每次都不会更改,因此您可以使服务器仅在第一条消息上设置ip
。在客户端上,只需使用收到的第一个IP。