
Socket.IO 是一个库,可以在客户端和服务器之间实现低延迟、双向和基于事件的通信。
Socket.IO 连接可以使用以下不同的底层传输方式建立:
Socket.IO 会根据浏览器的能力(如对各种传输的支持情况)以及网络环境(某些网络会屏蔽 WebSocket 和/或 WebTransport 连接)自动选择最佳可用选项。

Socket.IO 支持多种编程语言的服务器和客户端实现:
服务器端实现
客户端实现
相比普通 WebSocket,Socket.IO 提供以下特性:
若无法建立 WebSocket 连接,连接将回退到 HTTP 长轮询。该功能可应对浏览器支持不足或代理配置错误导致的 WebSocket 连接失败。
Socket.IO 包含心跳机制定期检查连接状态。客户端断开后,会以指数回退延迟自动重新连接,避免压垮服务器。
客户端断开连接时,数据包自动缓冲,并在重新连接时发送。
支持发送事件并接收响应,还可设置超时:
socket.emit("hello", "world", (response) => {
console.log(response); // "got it"
});
服务器端可向所有连接客户端或子集(如指定房间)发送事件,在扩展到多节点时同样有效:
io.emit("hello");
io.to("news").emit("hello");
通过命名空间在单个共享连接上拆分逻辑,例如区分普通用户与管理员频道:
io.of("/admin").on("connection", (socket) => { /* 管理员用户 */ });
socket.emit("hello", "world") 会发送为 42["hello","world"],每条消息增加几个字节,可通过自定义解析器进一步减少。浏览器包大小为 10.4 kB(压缩后)。Socket.IO 适用于需要在浏览器与服务器之间建立可靠双向实时通信的 Web 应用,例如聊天室、实时仪表盘、协同编辑等。不适用于移动应用后台保活类消息推送场景。
可参考官方文档的入门示例、服务器安装与客户端安装指南进一步了解。