评论区、消息提醒、在线状态,都靠服务端主动推送。HTTP 做不到,WebSocket 补齐这块。
原理
客户端和服务端建立一次 TCP 长连接,双向实时传数据,代替 HTTP 的重复轮询。
最小实现(Node)
const WebSocket = require('ws')
const wss = new WebSocket.Server({ port: 8080 })
wss.on('connection', ws => {
ws.send('connected')
ws.on('message', m => wss.clients.forEach(c => c.send(m)))
}) 生产注意
- Nginx 配
proxy_set_header Upgrade $http_upgrade - 断开重连 + 心跳保活
- 广播别泄全量,按订阅分组