概述目标:在WebSocket连接建立与存续期间进行鉴权与心跳管理,避免空闲断开与令牌过期导致的中断。适用:实时推送、IM、通知系统。核心与实战握手鉴权(HTTP升级前):GET /ws HTTP/1.1 Sec-WebSocket-Key: ... Authorization: Bearer eyJhbGciOi... 连接建立后消息协议:// 客户端->服务端定期发送心跳 { "type": "ping", "ts": 1732617600000 } // 服务端回复 { "type": "pong", "ts": 1732617600000 } // 令牌快过期时刷新 { "type": "token_refresh", "token": "..." } 服务器示例(Node.js):const WebSocket = require('ws') const wss = new WebSocket.Server({ port: 8080 }) function verifyToken(token) { /* 校验JWT与过期 */ } wss.on('connection', (ws, req) => { const auth = req.headers['authorization'] if (!auth || !verifyToken(auth.split(' ')[1])) { ws.close(4001, 'unauthorized'); return } ws.isAlive = true ws.on('message', (msg) => { const data = JSON.parse(msg) if (data.type === 'ping') { ws.send(JSON.stringify({ type: 'pong', ts: Date.now() })) } if (data.type === 'token_refresh') { if (verifyToken(data.token)) ws.authToken = data.token; else ws.close(4001, 'unauthorized') } }) ws.on('close', () => { /* 清理资源 */ }) }) setInterval(() => { wss.clients.forEach((ws) => { try { ws.ping() } catch {} }) }, 30000) 示例断线重连与消息补偿:-- 客户端缓存未确认消息,重连后携带最后游标拉取补偿 服务端连接上限与分片:-- 通过连接分片与负载均衡扩展;记录连接ID与心跳状态 验证与监控连接与心跳:统计心跳丢失与断开原因;设置闲置超时与重试策略。安全性:验证令牌刷新与权限变化;在关闭时返回原因码。性能:观测消息队列与发送速率;避免大消息阻塞。常见误区仅握手鉴权忽视续期;长连接需支持令牌刷新。无心跳导致代理或服务端超时断开;需ping/pong与pong检查。重连未进行补偿导致消息丢失;需游标与补偿机制。结语通过握手鉴权、心跳保活与令牌刷新,WebSocket连接可在生产环境达到安全与高可靠,满足实时业务需求。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部
2.007586s