問題中提供的解決方案不適用於大尺寸文件。它只適用於較小的圖像尺寸。 更好和標準的方法是使用chunking。 GRPC支持流內置的,所以它是很容易在塊中,我們可以使用流媒體分塊上述方式發送
syntax = 'proto3'
message UploadImageRequest{
bytes image = 1;
}
rpc UploadImage(stream UploadImageRequest) returns (Ack);
。
用於分塊的所有語言提供了它自己的方式來基於塊大小的塊文件。
事情打理:
你需要處理的分塊邏輯,流有助於自然發送。 如果你想發送元數據也有三種方法。
1:以下結構
message UploadImageRequest{
AuthToken auth = 1;
FileType image_format = 2;
bytes image = 3;
}
rpc UploadImage(stream UploadImageRequest) returns (Ack);
這裏字節的使用仍然塊和第一個塊發送的authToken和文件類型以及所有其他請求只是不發送這些元數據。
2:您還可以使用oneof
這是更容易。
message UploadImageRequest{
oneof test_oneof {
Metadata meta = 2;
bytes image = 1;
}
}
message Metadata{
AuthToken auth = 1;
FileType image_format = 2;
}
rpc UploadImage(stream UploadImageRequest) returns (Ack);
3:只是使用以下結構與在第一組塊發送的元數據和其他塊將有數據。你需要在代碼中處理。
syntax = 'proto3'
message UploadImageRequest{
bytes message = 1;
}
rpc UploadImage(stream UploadImageRequest) returns (Ack);
最後爲auth你可以使用頭,而不是發送消息。
您提到的gRPC文檔中有哪些警告? –
@EricAnderson「協議緩衝區並不是爲了處理大量消息而設計的,根據一般經驗,如果您處理的消息大於每兆字節,則可能是考慮替代策略的時候了。」 -https://developers.google.com/protocol-buffers/docs/techniques?hl = en –