注意:此功能在 Web Workers 中可用。
WebSocket API 允许在用户浏览器和服务器之间建立双向交互式通信会话。使用此 API,您可以向服务器发送消息并接收响应,而无需轮询服务器以获取回复。
WebSocket API 提供了两种创建和使用 WebSocket 连接的替代机制:WebSocket 接口和 WebSocketStream 接口。
WebSocket 接口是稳定且具有良好的浏览器和服务器支持。但是,它不支持背压。因此,当消息到达速度快于应用程序处理速度时,它将通过缓冲这些消息来填满设备的内存,或因 CPU 使用率 100% 而变得无响应,或两者兼而有之。
WebSocketStream 接口是 WebSocket 的基于Promise 的替代方案。它使用Streams API 来处理消息的接收和发送,这意味着套接字连接可以自动利用流背压,从而调节读写速度以避免应用程序中的瓶颈。但是,WebSocketStream 是非标准的,目前仅在一个渲染引擎中受支持。
此外,WebTransport API 预计将取代许多应用程序中的 WebSocket API。WebTransport 是一个通用的、低级的 API,它提供了背压以及 WebSocket 或 WebSocketStream 都不支持的许多其他功能,例如单向流、乱序交付以及通过数据报进行不可靠的数据传输。WebTransport 比 WebSockets 更复杂,并且其跨浏览器支持不如 WebSocket 广泛,但它能够实现复杂的解决方案。如果标准的 WebSocket 连接适合您的用例并且您需要广泛的浏览器兼容性,那么您应该使用 WebSockets API 来快速上手。但是,如果您的应用程序需要非标准的自定义解决方案,那么您应该使用 WebTransport API。
注意:如果页面具有打开的 WebSocket 连接,浏览器可能不会将其添加到bfcache。因此,建议在用户完成页面使用后关闭连接。请参阅处理 bfcache。