用途:在 Node.js 中实现实时双向通信,适用于聊天应用、实时通知、协作工具和实时仪表盘等低延迟场景。
主要能力:
- 服务器搭建:可用 Socket.io 或原生 ws 库创建 WebSocket 服务端,处理连接生命周期与事件收发。
- 事件与广播:提供 io.emit、socket.to、房间(room)与命名空间(namespace)机制,支持按用户或频道定向推送。
- 认证:通过 Socket.io 中间件在握手阶段校验 JWT,并可设置命名空间级别的权限控制。
- 横向扩展:使用 @socket.io/redis-adapter 与 redis 客户端(pubClient/subClient)让事件跨多实例广播。
- 可靠性:ws 中可用 ping/pong 心跳检测失活连接,客户端可配置重连次数与延迟。
- 测试:给出用 socket.io 与 socket.io-client 编写单元测试的模板。
使用方式:先安装并初始化服务器,再处理 connection 事件、注册自定义事件(如 chat:message、room:join),客户端通过 socket.emit 发送、socket.on 接收。原生 ws 示例展示 ws.on('message')、ws.send 与心跳定时器用法。
限制与说明:资料指出使用场景需为实时双向、低延迟需求;排查项包括心跳缺失导致断连、房间错误导致收不到消息、无 Redis 导致扩展问题、监听器未清理导致内存泄漏。部分概念如二进制传输、重连策略、性能优化仅列为进阶学习项,未展开细节。课程时长为资料给出的参考建议,非强制要求。