HTTP2 是不是适用于视频流或实时多人游戏?
Posted
技术标签:
【中文标题】HTTP2 是不是适用于视频流或实时多人游戏?【英文标题】:is HTTP2 viable for video streaming or real-time multiplayer games?HTTP2 是否适用于视频流或实时多人游戏? 【发布时间】:2020-08-09 18:49:33 【问题描述】:试图围绕什么是可能的以及它与 Web 套接字相比如何。 Http2 允许服务器连续推送到客户端,是否有任何限制阻止它被用于以足够快的速度发送视频数据包以使视频流工作?
【问题讨论】:
【参考方案1】:HTTP/2 推送旨在推送与主要资源关联的资源。
它主要用于浏览器,在请求 index.html
页面时,它们会被推送到 index.html
引用的 style.css
和 application.js
。
从技术上讲,可以通过对客户端请求的单个响应(批量下载)将视频流式传输到客户端。
对于更高级的功能,例如提前缓冲和仅在视频流消费时下载,HTTP 客户端可以使range requests。
对于下载不同分辨率的并行流 - 720p 和 1080p - 客户端可以发出两个不同的请求。
需要配置 HTTP/2 以使客户端具有较大的流量控制窗口(请参阅this answer),但对于浏览器来说已经是这种情况,并且大多数 HTTP/2 客户端库都支持这种配置。
所以在技术上是可行的,但与 WebSocket 相比如何?
WebSocket 完全缺乏元数据的概念,因此应用程序编写者必须为请求和响应发明一些元数据格式,例如视频流 ID/标题、分辨率、范围等,然后下载原始视频。
HTTP/2 帧开销为 9 个字节,WebSocket 帧开销为 10 个字节(假设大帧)。 但是,对于 HTTP/2,最大帧大小为 16 KiB,对于 WebSocket 可能更大,尽管可能不建议太大(因为客户端可能决定不为服务器发送的超大帧分配资源)。
此外,在 WebSocket 中,还有 最大消息大小 的概念。您通常不能只发送所有属于同一消息的 WebSocket 帧,因此您需要将视频拆分为多个较小的消息(但这只是技术性问题)。
最后,HTTP/2 可以在 HTTP/2 流 (RFC8441) 中携带 WebSocket 通信。
这意味着 HTTP/2 请求/响应可以完美地模拟 WebSocket 通信:您将有一个“无限”的请求——请求内容永不结束(直到通信关闭)——用于客户端到服务器的通信,和一个“无限”响应 - 一个响应内容永不结束(直到通信关闭)的响应 - 用于服务器到客户端的通信。
总而言之,我不会将 HTTP/2 push 用于流式传输视频:普通的 HTTP/2 响应可以更有效地完成这项工作(就像 WebSocket 一样)。
我发现 WebSocket 对于从服务器到客户端的主动通信非常有用。对于 HTTP/2,客户端必须始终发起请求。
【讨论】:
以上是关于HTTP2 是不是适用于视频流或实时多人游戏?的主要内容,如果未能解决你的问题,请参考以下文章