从客户端向服务器发送大量数据
Send huge data from client to server
我正在与 Go
和 Grpc
合作。我有一个 XML
文件要从客户端发送到服务器。当服务器调用客户端上的方法时,客户端会返回一个 XML
文档,该文档的范围可以从几 kB
到 100 秒 MB
或更多。请帮我看看我该怎么做?我应该
- 将值赋给一个
string
变量并正常发送 -> rpc GetCMData (CmRequest) returns (CmReply) {}
- 将值分配给
string
变量并作为 stream
-> rpc GetCMData (CmRequest) returns (stream CmReply) {}
发送
- 还有其他更好的方法吗?
这是 CmReply
的样子:
message CmReply {
string name = 1;
}
第二个更像你想走的路。但还有一点:您确定要在 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
您有两个选择:
- 按照您上面描述的方式实施客户端流协议(将您的文件分成块并将它们一个接一个地发送到服务器):
https://github.com/grpc/grpc-go/issues/414#issuecomment-284515856
- 为您的
GRPC
客户端和服务器扩展消息大小的默认 4 MB
限制(这样您就可以在不流式传输的情况下发送和接收大消息):
https://godoc.org/google.golang.org/grpc#MaxMsgSize
https://godoc.org/google.golang.org/grpc#WithMaxMsgSize
我正在与 Go
和 Grpc
合作。我有一个 XML
文件要从客户端发送到服务器。当服务器调用客户端上的方法时,客户端会返回一个 XML
文档,该文档的范围可以从几 kB
到 100 秒 MB
或更多。请帮我看看我该怎么做?我应该
- 将值赋给一个
string
变量并正常发送 ->rpc GetCMData (CmRequest) returns (CmReply) {}
- 将值分配给
string
变量并作为stream
->rpc GetCMData (CmRequest) returns (stream CmReply) {}
发送
- 还有其他更好的方法吗?
这是 CmReply
的样子:
message CmReply {
string name = 1;
}
第二个更像你想走的路。但还有一点:您确定要在 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
您有两个选择:
- 按照您上面描述的方式实施客户端流协议(将您的文件分成块并将它们一个接一个地发送到服务器): https://github.com/grpc/grpc-go/issues/414#issuecomment-284515856
- 为您的
GRPC
客户端和服务器扩展消息大小的默认4 MB
限制(这样您就可以在不流式传输的情况下发送和接收大消息): https://godoc.org/google.golang.org/grpc#MaxMsgSize https://godoc.org/google.golang.org/grpc#WithMaxMsgSize