WebTransport 是一种新的规范,可以提供WebSocket 的替代方案。
对于需要在端点之间进行低延迟、事件驱动通信的应用程序来说,WebSockets 一直是首选,但 WebTransport 可能会改变这种状况。
在本文中,您将了解 WebTransport 的功能及其与 WebSockets 的区别。您还将了解何时以及是否应该进行转换。
WebSockets 与 WebTransport 的对比一览
WebSockets 是一种通过持久的单套接字连接在客户端和服务器之间实现双向、全双工通信的技术。这样就可以实现低延迟、实时更新,并创建更丰富的通信和游戏应用程序。以前,网络依赖于请求和响应,而请求和响应对于这类应用来说不够动态。
较新的 WebTransport 可提供安全、多路复用、实时传输,并已具备可靠和不可靠发送数据的 API。
在可靠的数据传输中,发送方会收到数据传输成功或失败的通知,失败的传输通常会重新发送,直到成功为止,然后再发送下一个数据包。在不可靠传输中,没有传输成功的确认,没有收到的数据包根本不会被传送。不可靠传输通常用于流媒体视频等场合,在这些场合中,速度是一个关键因素,而轻微的数据丢失(如几帧视频)是可以接受的。由于 WebTransport 同时使用这两种方法,因此有很多使用案例,例如多人游戏的双向数据流、交互式直播流以及传感器和物联网设备的数据传输。
WebSockets 为每个连接创建一个流,而 WebTransport 允许您通过单个连接创建多个流。它避免了 WebSocket 所遭受的队头阻塞延迟,并且在创建连接时占用的资源较少。虽然 WebSockets 最初是作为 HTTP/1.1 协议,但 WebTransport 在几种不同的协议之上工作,包括一些 WebSockets 不支持的协议。
它与HTTP/3配合使用,HTTP/3 是万维网使用的传输协议的即将推出的版本。HTTP/3 使用QUIC 协议进行传输层数据交换,这有几个优点。QUIC 可以防止队头阻塞延迟,从而在许多情况下提高网络性能。这是 WebSocket 的限制。
通过WebTransport,您还可以使用promise和异步函数的await 关键字等功能。该 API 也在 Web Workers 中运行,支持多线程。
以下是WebTransport 工作组文档中的异步函数示例。
async function sendData(url, data) {
const wt = new WebTransport(url);
const writable = await wt.createUnidirectionalStream();
const writer = writable.getWriter();
await writer.write(data);
await writer.close();
}
WebTransport 工作组仍在敲定规范的细节,因此可能会出现更多特性和功能。
4 个 WebTransport 使用案例
WebTransport 有许多潜在的使用案例。让我们来看看它的四个闪光点。
加密流
WebTransport 的流 API 允许您创建用于发送有序数据的连接。由于 WebTransport 使用 QUIC 协议,因此与 WebSockets 使用的 TCP 相比,这些连接在打开和关闭时占用的资源较少。
您还可以更安全地提供流媒体。WebTransport 有多种安全措施,如要求使用 Origin 标头,以及通过传输参数进行特定选择。
通信
WebTransport 可以通过同一连接发送多种类型的数据。这意味着您可以在可靠发送文本或文件数据的同时,不间断地发送和接收视频信息。
这一功能让您可以在每个连接上做更多的事情,从而在更多的同时在线用户之间实现更丰富的通信。这意味着您可以在不同的通道上发送不同类型的内容,因此像大图像这样的内容可以通过不同的连接发送,而不是其他数据,这就意味着图像不会阻碍聊天通信。
您还可以创建双向流,允许服务器或客户端启动通信,因此如果您正在实施一个消息系统,数据交换可以快速进行。
多人游戏
WebTransport 支持 HTTP/2、HTTP/3 和 QUIC 协议。它能通过 HTTP 无序接收数据,并能自行请求数据或监听服务器推送的数据。无论是可靠还是不可靠,它都能做到这一点。
有了 WebTransport 的双向流,服务器推送的数据延迟非常低,这对游戏开发来说是一大优势。这意味着用户输入与响应之间的延迟更短,这在射击、驾驶或格斗等动作游戏中至关重要。
它还能提高云游戏服务的响应时间,在云游戏服务中,服务器负责渲染和游戏,并将视频流传输到瘦客户端,瘦客户端再将用户输入传回服务器。
传感器数据
许多物联网(IOT)设备都会记录需要传输到服务器的数据,WebTransport 的一个潜在用途就是提供低延迟的传输方法。物联网设备经常定期发送少量数据。消耗较少的资源对设备的电池寿命和网络拥塞都有好处。
随着物联网的发展,使用中的大量设备会消耗越来越多的连接,这可能会成为一个问题,因此这些设备越轻便越好。
能使用 WebTransport 吗?
现在让我们来看看 WebTransport 提供了哪些具体特性和功能。该规范仍处于公开草案阶段,但已完全可用。
除了 QUIC 协议外,还有一个 API 可让浏览器控制流和数据报。API 仅支持 HTTPS,以确保安全。
QUIC
QUIC 是一种传输协议,旨在取代 TCP 并提高网络性能。它使用 UDP,HTTP/3 就是为利用它而设计的。在 QUIC 上使用 HTTP/3 时,建立连接的速度更快,拥塞控制反馈可帮助避免问题。如前所述,QUIC 还能防止行头阻塞。
它不需要那么多的报头信息,从而实现了轻量级通信,没有 HTTP 的开销。它还与硬件无关,只需在应用层提供支持。
浏览器和应用程序已广泛支持 QUIC。目前有 7.7% 的网站使用它,但这一数字正在稳步上升。
如果你想在 Chrome 浏览器和其他许多基于 Chromium 的浏览器中试用 QUIC,可以在设置中激活它。
在 URL 栏中键入 chrome://flags,然后找到实验性 QUIC 协议设置并启用,如下图所示。(对于基于 Chromium 的浏览器,只需将 chrome://flags 替换为 [browser name]://flags
)。
其他协议
WebTransport 还可以在 HTTP/2 或 HTTP/3 的基础上运行,无需 QUIC。它还可以使用 HTTP/2 作为后备协议,让您可以利用 WebTransport 的优势,而不受网络的限制。
HTTP/2 兼容性可能会让你在不支持 HTTP/3 的旧设备上运行它,并让你利用资源优先级等功能。
数据报
WebTransport 主要使用数据报和流。数据报是一个独立的数据包,可以以任何特定顺序到达。数据报的发送是不可靠的。不可靠的数据可以高速发送,即使某些数据被丢弃,连接也能应付自如。WebTransport 规范允许使用 maxDatagramSize 属性限制数据报大小。
WebTransport 对象有一个数据报对象,可通过其可读写属性进行访问。数据报可以排队,也可以创建等待数据报传输的承诺。
WebTransport 对象还包括状态数据,显示它们是正在连接、已连接、已关闭还是已失败。它们还包括表示对象已就绪或已关闭的承诺。
流(Streams)
流允许您发送有序、可靠的数据。您可以建立一个数据流,并让服务器将这些内容推送到客户端。它允许低延迟的实时通信。
在应用程序接口(API)中,WebTransport 对象有用于代表不同类型流的其他对象的插槽。这些对象包括发送流(SendStream)、接收流(ReceiveStream)和双向流(Bidirectional Stream)对象,所有这些都在规范的工作草案中进行了定义。
WebTransport 还允许以部分可靠的方式发送多数据流数据。以这种方式发送数据时,并不保证数据会按正确的顺序到达,而是根据其他相关流的状态进行排序。这种方式在发送视频帧时效果很好。
通过流,您还可以将接收到的数据导入一个处理程序,如 TextDecoderStream,该程序会将数据转换为应用程序可随时使用的格式。
- 发送流
SendStream 对象是一种用于外发数据的 WritableStream。它们存储流对象,但 SendStream 对象还包含一个承诺,该承诺定义了它将采取的行动,如关闭或中止。
SendStream 对象还包含一个槽,用于将其连接到 HTTP/3 传输层。
- 接收流
ReceiveStream 对象是一种处理传入数据的 ReadableStream。
ReceiveStream 对象的结构与 SendStream 对象类似,都有一个流槽和传输槽。不过,它不包括承诺。
- 双向流
双向流将发送流和接收流合并为一个对象,这样就可以在一个地方管理双向通信。对象具有可读和可写属性,与上文讨论的 ReceiveStream 和 SendStream 对象相对应。
通过这些属性,它们可以处理以任一方向发送的数据。你可以读取传入流并写入传出流。
- 单向流
您还可以创建单向流。IncomingUnidirectionalStreams 是由多个 ReceiveStreams 组成的可读数据流。您可以调用 createUnidirectionalStream() 来创建相应的传出流。
WebTransport 能否取代 WebSockets?
WebTransport 规范仍在变化之中,但它的前景一片光明。随着它的不断成型,我们肯定会看到更多的开发人员采用它并利用它带来的新功能。
早期采用者将获得丰厚的回报,但同时也要承担最大的风险,因为目前还不清楚该规范将如何完全兑现其承诺。我们不知道浏览器对它的支持程度如何,开发人员采用它的可能性有多大,也不知道它将如何发展。
WebTransport 在某些使用案例中具有优势,例如低延迟场景和为多种目的重复使用连接。但它并不是万能的,在有些情况下,WebSockets 仍然是最佳选择,或者至少是完美的选择。
作为一种新的规范,WebTransport 仍处于萌芽阶段,因此在其他工具更新到可以使用 WebTransport 之前,它将更难发挥作用。就目前而言,这意味着要时刻保持清醒的头脑,做好适应的准备。
WebSockets 仍能提供大量功能,而且作为一种成熟的标准,所有现代浏览器都完全支持。WebTransport 应能提供适度的性能改进和增量收益,但也可能会带来新的工程挑战,这些挑战必须在构建生产就绪系统时加以解决。
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/39991.html