【问题标题】:gRPC in Java - How to recieve file content as responseJava中的gRPC - 如何接收文件内容作为响应
【发布时间】:2018-07-25 07:47:18
【问题描述】:

我是 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 提供的示例中了解到,如果有响应对象列表(链接中提供的示例中的功能对象列表),则迭代器将有效。但就我而言,我需要一个作为流发送的 LogResponse。请为此提供任何建议/替代方案。提前致谢。 :)

【问题讨论】:

    标签: grpc grpc-java


    【解决方案1】:

    在您的方法定义中:

    rpc fetchLogContent(LogRequest) returns (stream LogResponse);
    

    stream 关键字意味着您将收到 0 条或更多条 LogResponse 消息。如果内容非常大,您可以做的是读取文件的块(如 4kb)并发送多个 LogResponse 消息,每个消息都带有文件的一部分。客户端可以重复读取这些块,然后将其重新组合在一起。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-08
      • 2016-02-17
      • 2018-10-09
      • 2020-10-21
      • 1970-01-01
      • 2019-12-11
      • 2023-03-10
      相关资源
      最近更新 更多