gRPC + 图片上传

2024-05-08

我想创建一个简单的gRPC用户可以上传他/她的图片的端点。协议缓冲区声明如下:

message UploadImageRequest {
    AuthToken auth = 1;
    // An enum with either JPG or PNG
    FileType image_format = 2;
    // Image file as bytes
    bytes image = 3;
}

无论 gRPC 文档中出现警告,这种上传图片(和接收图片)的方法仍然可以吗?

如果不是,是否有更好的方法(标准)使用标准形式上传图片并存储图像文件位置?


对于大型二进制传输,标准方法是分块。分块有两个目的:

  1. 减少处理每条消息所需的最大内存量
  2. 提供恢复部分上传的边界。

对于您的用例#2 可能不是很有必要。

在 gRPC 中,客户端流式调用允许相当自然的分块,因为它具有流控制、管道化,并且易于维护客户端和服务器代码中的上下文。如果您关心部分上传的恢复,那么双向流式传输效果很好,因为服务器可以通过客户端可以用来恢复的进度确认进行响应。

使用单独的 RPC 进行分块也是可能的,但会更加复杂。当负载平衡时,可能需要后端与每个块的其他后端协调。如果您串行上传块,则网络延迟可能会降低上传速度,因为您大部分时间都在等待接收服务器的响应。然后,您要么必须并行上传(但并行上传多少个?),要么增加块大小。但增加块大小会增加处理每个块所需的内存,并增加恢复失败上传的粒度。并行上传还需要服务器处理乱序上传。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gRPC + 图片上传 的相关文章

随机推荐

  • 扭曲和响应类型以及特征对象?

    我有一个扭曲拒绝处理程序 我像这样使用它 recover handle rejection 它是这样声明的 pub async fn handle rejection err Rejection gt Result
  • 二进制浮点加法算法

    我试图理解二进制级别的 IEEE 754 浮点加法 我遵循了一些在网上找到的示例算法 并且大量测试用例与经过验证的软件实现相匹配 我的算法目前只处理正数 但是 我没有得到与此测试用例的匹配 0000100011110011011001001
  • 类型“MyApp”已包含“MystatusBar”的定义

    我的应用程序 XAML
  • 如何指定使用Glide for Android加载图片的重试次数?

    我正在为我的 Android 应用程序使用 glide 库 我想告诉它在放弃并显示错误占位符图像之前重试获取图像 X 次 可能使用指数退避 知道如何做到这一点吗 顺便说一句 我正在使用 Volley 集成 使用您自己的资源解码器 我仅加载本
  • PyTorch 中的交叉熵

    交叉熵公式 但为什么下面给出loss 0 7437代替loss 0 since 1 log 1 0 import torch import torch nn as nn from torch autograd import Variable
  • 模板是如何实例化的?

    这是一个练习 来自C 入门第五版 练习 16 27 对于每个带标签的语句 解释什么 如果有 实例化发生 如果实例化了模板 请解释原因 如果 不 请解释为什么不 第677页 template
  • 使用 TypeScript / Angular2 循环对象的键/值[重复]

    这个问题在这里已经有答案了 如何使用 TypeScript 迭代对象并能够访问键和值 我的 json 对象看起来像这样 clients 123abc Forename Simon Surname Sample 456def Forename
  • 为什么 get_tensor_by_name 无法正确获取 tf.keras.layers 定义的层的权重

    我尝试获取由以下定义的层的权重tf keras layers通过使用get tensor by name in tensorflow 代码如下 encoding utf 8 import tensorflow as tf x tf plac
  • 使用 CryptUnprotectData 解密 WEP wlan 配置文件密钥

    我正在尝试使用解密 WEP 配置文件的密钥加密解除数据保护 http msdn microsoft com en us library windows desktop aa380882 28v vs 85 29 aspx 我获取配置文件密钥
  • Double.toString 对于大值没有指数表示法

    在我的 JSF2 应用程序中 我希望显示双精度值而不使用指数表示法 是否可以 我无法使用NumberFormat or DecimalFormat因为它将把我的数据类型更改为字符串 我从Java文档中了解到 如果我的double值小于10
  • 如何在 C# 中读取 Visio 文档内容

    我的DLL库代码如下 using System using IVisio Microsoft Office Interop Visio namespace Emix public class Visio protected String p
  • AS更新到1.0后,项目中出现“method ID not in [0, 0xffff]: 65536”错误

    我将 Android Studio 更新到最新版本 并让它 修复项目 之类的 但现在我的项目无法编译 给了我 FAILED FAILURE Build failed with an exception What went wrong Exe
  • Firebase Storage put() 方法上传数字数组而不是字符串

    我想将字符串上传到 Firebase 存储文件 我尝试过 let myString storage ref path child file txt putString myString raw and with let myString s
  • Pygame 文本不渲染

    好的 我正在用 python 和 pygame 制作一个多项选择测验游戏 不过 我已经完成了开始屏幕并尝试制作问题屏幕 我根本不明白为什么文本不呈现 这是我的代码 enter pressed False random question ra
  • nginx 匹配位置中的特定单词

    我在匹配 nginx request body 变量中的特定单词时遇到问题 如果正文请求中有特殊单词 我想代理传递 所以我的方法是这样的 location php if request body proxy pass http test p
  • 客户端如何获取session id? (网络套接字)

    有什么办法可以做到这一点吗 客户端 function connectWebSocket var socket new SockJS socket stompClient Stomp over socket stompClient conne
  • 有没有办法让vscode行号字段宽度变小?

    包含代码行号 VSC 的垂直列太宽 有办法缩小范围吗 您无法更改此列的大小 实际上有三列 行号左侧是名为的列glyphMargin 设置调试断点的地方 红点 编辑设置时 当您指向该线上时 该列会显示一支笔 如下面的屏幕截图所示 行号本身 在
  • 在C中更改函数内的数组

    我正在学习 C 并且很困惑为什么在 main 中创建的数组不会在函数内部更改 我假设传递的数组是一个指针 并且更改指针应该更改数组 对吧 有人可以解释这种情况下发生了什么吗 谢谢你的帮助 int main int i length 10 i
  • C# 中 WinForm TextBox 中数字的按键事件

    我想限制用户在文本框中仅输入数字 我在按键事件中添加此代码 private void txtPartID KeyPress object sender KeyPressEventArgs e if e KeyChar gt 0 e KeyC
  • gRPC + 图片上传

    我想创建一个简单的gRPC用户可以上传他 她的图片的端点 协议缓冲区声明如下 message UploadImageRequest AuthToken auth 1 An enum with either JPG or PNG FileTy