HTTP2 是否适用于视频流或实时多人游戏?

is HTTP2 viable for video streaming or real-time multiplayer games?

试着思考什么是可能的,以及它与网络套接字的比较。 Http2 允许服务器不断地向客户端推送,是否有任何限制可以防止它被用来以足够快的速度发送视频数据包以使视频流工作?

HTTP/2 推送旨在推送与主要资源关联的资源。

它主要用于浏览器,在请求 index.html 页面时,它们会被推送 style.cssapplication.js,它们被 index.html.[=17 引用=]

从技术上讲,可以通过对客户端请求的单个响应(批量下载)将视频流式传输到客户端。

对于更高级的功能,例如稍微提前缓冲和仅在视频流消耗时下载,HTTP 客户端可以使 range requests

对于不同分辨率的并行流的下载 - 720p 与 1080p - 客户端可以发出两个不同的请求。

HTTP/2 需要进行配置,以便客户端具有较大的流量控制 window(请参阅 ),但对于浏览器来说已经是这种情况,而且大多数 HTTP/2 客户端库支持这种配置。

所以这在技术上是可行的,但它与 WebSocket 相比如何?

WebSocket 完全没有元数据的概念,因此应用程序编写者必须为请求和响应发明一些元数据格式,例如视频流 id/title、分辨率、范围等,然后下载原始视频。

HTTP/2 帧开销为 9 字节,WebSocket 帧开销为 10 字节(假设帧较大)。 但是,HTTP/2 的最大帧大小为 16 KiB,WebSocket 的最大帧大小可能更大,尽管可能不建议太大(因为客户端可能决定不为服务器发送的超大帧分配资源) .

此外,在 WebSocket 中,存在 最大消息大小 的概念。您通常不能只发送属于同一消息的 WebSocket 帧,因此您需要将视频拆分为多个更小的 消息(但这只是技术问题)。

最后,HTTP/2 可以在 HTTP/2 流中进行 WebSocket 通信 (RFC8441)。

这意味着 HTTP/2 request/response 可以完美模拟 WebSocket 通信:您将有一个“无限”请求 - 请求内容永不结束(直到通信关闭) -用于客户端到服务器的通信,以及“无限”响应 - 具有永不结束(直到通信关闭)的响应内容的响应 - 用于服务器到客户端的通信。

总而言之,我不会将 HTTP/2 push 用于流式传输视频:正常的 HTTP/2 响应可以更有效地完成工作(就像 WebSocket 会).

我发现 WebSocket 对于从服务器到客户端的 未经请求的 通信非常有用。使用 HTTP/2,客户端必须始终发起请求。