streaming - gRPC 客户端流是如何实现的
问题描述
gRPC 客户端流式传输/双向流式传输是如何使用 HTTP/2 实现的?
服务器流式传输是有道理的,因为它可以利用服务器推送来发送对请求的多个响应,但我不清楚它如何像通过 websocket 那样通过 HTTP/2 进行双向消息传递。
解决方案
gRPC 将流编码为 HTTP 主体。每条消息前有一个 5 字节的头,由消息长度和标志字节组成。它不使用 SERVER_PUSH 或其他特定于 HTTP/2 的功能进行流式传输。
gRPC 的核心是流式传输。一元(单个请求,单个响应)和服务器流式处理(单个请求)只是用于生成更清晰的 API 或更优化的 I/O 行为的特殊情况。但是在线上,一切看起来都与流媒体相同。
HTTP/1 的规范允许但不要求流式连接和双向连接,但某些实现不支持它们。但是由于 HTTP/2 的性质,不支持它们通常需要更多的工作。此外,没有十年前的 HTTP/2 代理会导致兼容性问题。gRPC 能够与 HTTP/2 生态系统一起工作,以鼓励支持流式传输。
有关 gRPC 编码的更多信息,请参阅 gRPC 的PROTOCOL-HTTP2.md,尤其是Length-Prefixed-Message
.
推荐阅读
- jquery - AJAX 响应错误:[object Object] ASP.net Web 核心应用程序
- python - 有没有办法检测文本是否适合按钮/标签并减小字体大小直到它适合包装文本?
- php - 有没有更好的方法在 laravel 中使用内存有效的 foreach 添加相同数组索引的值?
- batch-file - 为什么 Windows 启动时我的批处理文件没有打开?
- wpf - 如何让 WPF 用户控件元素继承父样式,然后添加自定义样式?
- javascript - 日文、英文标签(如 Twitter)的正则表达式
- ios - Rider IDE 无法在 iPhone 设备上运行项目 Xamarin.iOS
- python - Pandas read_csv 用于无报价文件
- selenium - 使用 selenium webdriver 提取文本
- c# - 合并具有相同属性值的json对象c#