我正在使用Grpc
和XML
。我有一个XML
文件要从客户端发送到服务器。当服务器在客户端上调用方法时,客户端会使用kB
文档进行回复,该文档的范围可以从少量MB
到100秒string
,也可能更多。请帮我怎么做?我应该
rpc GetCMData (CmRequest) returns (CmReply) {}
变量并正常发送 - > string
stream
变量并发送为rpc GetCMData (CmRequest) returns (stream CmReply) {}
- > CmReply
这就是message CmReply {
string name = 1;
}
的样子:
{{1}}
答案 0 :(得分: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 :(得分:1)
您有两种选择:
4 MB
客户端和服务器的邮件大小的默认GRPC
限制(然后您就可以在不流式传输的情况下发送和接收大邮件):
https://godoc.org/google.golang.org/grpc#MaxMsgSize
https://godoc.org/google.golang.org/grpc#WithMaxMsgSize