Java中的gRPC-如何接收文件内容作为响应

时间:2018-07-25 07:47:19

标签: grpc grpc-java

我是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作为流发送。请为此提供任何建议/替代方案。提前致谢。 :)

1 个答案:

答案 0 :(得分:0)

在您的方法定义中:

rpc fetchLogContent(LogRequest) returns (stream LogResponse);

stream关键字表示您将收到0或更多LogResponse消息。如果内容很大,您可以做的是读取文件块(例如4kb),然后发送多个LogResponse消息,每个消息都包含文件的一部分。客户端可以重复读取这些块,然后将它们拼凑在一起。

由于ip字段每次都不会更改,因此您可以使服务器仅在第一条消息上设置ip。在客户端上,只需使用收到的第一个IP。