[尽我所能,以及如何与网络套接字进行比较。Http2允许服务器连续推送到客户端,是否有任何限制使其无法用来足够快地发送视频数据包以使视频流正常工作?
HTTP / 2推送被设计为推送与主资源关联的资源。
[主要用于浏览器,在请求index.html
页面时,它们会被style.css
引用的application.js
和index.html
推送。
从技术上讲,可以在对客户端请求(批量下载)的单个响应中将视频流式传输到客户端。
对于更高级的功能,例如缓冲一点并且仅在视频流消耗时下载,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帧,因此您需要将视频拆分为多个较小的messages(但这只是技术性问题)。最后,HTTP / 2可以在HTTP / 2流(RFC8441)中承载WebSocket通信。
这意味着HTTP / 2请求/响应可以完美地模拟WebSocket通信:您将有一个“无限”请求-一个请求内容永不结束(直到通信关闭)-用于客户端到服务器的通信,以及服务器到客户端的通信的“无限”响应-响应内容永不结束(直到通信关闭)。
总而言之,我不会使用HTTP / 2 push
来流式传输视频:正常的HTTP / 2响应可以更有效地完成工作(就像WebSocket一样。[我看到WebSocket对于从服务器到客户端的未经请求
通信非常有用。使用HTTP / 2,客户端必须始终启动请求。