WebSocket API

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

WebSocket API 是一种先进的技术,可在用户浏览器和服务器之间开启双向交互式通信会话。利用该 API,可以向服务器发送信息,并接收事件驱动的响应,而无需轮询服务器以获得回复。

备注: 虽然 WebSocket 连接在功能上与标准 Unix 风格的 socket 有些类似,但两者并无关联。

接口

WebSocket

用于连接 WebSocket 服务器的主要接口,之后可以在这个连接上发送和接收数据。

CloseEvent

连接关闭时 WebSocket 对象触发的事件。

MessageEvent

当从服务器获取到消息的时候 WebSocket 对象触发的事件。

指南

工具

  • AsyncAPI:用于描述基于 WebSocket 等协议的事件驱动架构的规范。可以使用它来描述基于 WebSocket 的 API,就像使用 OpenAPI 规范描述 REST API 一样。了解为什么要考虑将 AsyncAPI 与 WebSocket 结合使用如何使用
  • HumbleNet:一个在浏览器中工作的跨平台网络库。它由 WebSocket 和 WebRTC 的 C 语言封装器组成,可抽象出跨浏览器的差异,便于为游戏和其他应用程序创建多用户网络功能。
  • µWebSockets:由 C++11Node.js 实现的高度可扩展的 WebSocket 服务器和客户端。
  • Socket.IO:基于长轮询和 WebSocket 的 Node.js 第三方传输协议。
  • SocketCluster:适用于 Node.js 的 pub/sub WebSocket 框架,注重可扩展性。
  • WebSocket-Node:用 Node.js 实现的 WebSocket 服务器 API。
  • Total.js:用 Node.js 实现的 Web 应用程序框架(例如:WebSocket 聊天)。
  • Faye:用于 Node.js 服务器和客户端的 WebSocket(双向连接)和 EventSource(单向连接)。
  • SignalR:当 WebSocket 可用时,SignalR 将在覆盖范围内使用 WebSocket;当 WebSocket 不可用时,SignalR 将优雅地回退到其他技术,而应用程序代码保持不变。
  • Caddy:能够将任意命令(stdin/stdout)代理为 websocket 的 web 服务器。
  • ws:流行的 WebSocket 客户端和服务器 Node.js 库。
  • jsonrpc-bidirectional:异步 RPC,在一个连接上,服务器和客户端可以同时导出函数(客户端可以调用服务器,服务器也可以调用客户端)。
  • cowboy:Cowboy 是一款小型、快速、现代的 Erlang/OTP HTTP 服务器,支持 WebSocket。
  • ZeroMQ:ZeroMQ 是一个可嵌入的网络库,可通过进程内、IPC、TCP、UDP、TIPC、组播和 WebSocket 传输消息。
  • WebSocket King:帮助开发、测试和使用 WebSocket 服务器的客户端工具。
  • PHP WebSocket Server:用 PHP 编写的服务器,用于处理通过 websocket wss:// 或 ws:// 以及通过 ssl:// 和 tcp:// 的普通套接字进行的连接。
  • Channels:增加了对 WebSocket(以及其他需要长时间运行异步连接的协议)的支持的 Django 库。
  • Channels:在 Elixir Phoenix 框架中使用 WebSocket 进行可扩展的实时通信。
  • LiveView:在 Elixir Phoenix 框架中通过 WebSocket 实现实时交互式网络体验。
  • Flask-SocketIO:让 Flask 应用程序可以在客户端和服务器之间进行低延迟的双向通信。
  • Gorilla WebSocket:Gorilla WebSocket 是 WebSocket 协议的 Go 实现。

规范

Specification
WebSockets Standard
# the-websocket-interface

浏览器兼容性

BCD tables only load in the browser

参见