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

gRPC in Java - How to recieve file content as response

我是 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 时,它 returns 是一个迭代器。我从 grpc.io - java 提供的示例中了解到,如果有响应对象列表(link 中提供的示例中的 Feature 对象列表),迭代器将是有效的。但就我而言,我需要一个作为流发送的单个 LogResponse。请为此提供任何 suggestions/alternatives。提前致谢。 :)

在您的方法定义中:

rpc fetchLogContent(LogRequest) returns (stream LogResponse);

stream 关键字表示您将收到 0 条或更多条 LogResponse 消息。如果内容非常大,您可以做的是读取文件块(如 4kb)并发送多条 LogResponse 消息,每条消息都包含文件的一部分。客户端可以重复读取块,并将其拼凑起来。

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