客户端向服务器发送大数据

4
我正在使用 GoGrpc。我有一个要从客户端发送到服务器的 XML 文件。当服务器调用客户端上的方法时,客户端会以一个 XML 文档作为响应返回,其大小可能从几个 kB 到 100 多个 MB 不等。请帮我解决如何处理这个问题。我应该:
  1. 将值分配给 string 变量并正常发送 -> rpc GetCMData (CmRequest) returns (CmReply) {}
  2. 将值分配给 string 变量并作为 stream 发送 -> rpc GetCMData (CmRequest) returns (stream CmReply) {}
  3. 还有其他更好的方法吗?
CmReply 的样子是这样的:
message CmReply {
  string name = 1;
}
2个回答

2
第二个方案更适合你。但是,还有一个问题:你确定要在RAM中存储数百兆字节吗?我不是 Go-Geek,但我通常更喜欢使用文件流来处理数据。可以考虑实现类似于反压系统的机制。
如果你使用流方式处理数据:我建议你还需要实现一些措施以确保你能够处理流中断。假设你已经完成了一半的数据流,但这时流中断了。你不希望重新开始,并获取客户端已经拥有的所有之前的数据流元素。这也会再次增加流中断的风险。所以,建议增加类似于分页的机制,比如...
message CMRequest{
  int startAt = 0;
}

message CmReply {
  string id = 0;
  string name = 1;
}

如果流中断,您需要发送一个新的请求,其中startAt= LastCmReply.id+1。
这是一段关于grpc良好实践的视频:https://www.youtube.com/watch?v=Z_yD7YPL2oE&index=17&list=WL

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接