示例说明
实现 WebSocket 服务端,带心跳 ping pong 超时和广播,用于实时通信。本示例属于数据获取场景,提供可直接复制使用的javascript代码片段,附带边界条件与使用注意事项。
技术要点
- ping pong 心跳检测连接存活
- 超时未 pong 则 terminate 断开
- broadcast 向所有开放连接广播消息
代码解读
上述代码实现了带心跳的 WebSocket 服务端的核心逻辑。实现 WebSocket 服务端,带心跳 ping pong 超时和广播,用于实时通信。代码中包含输入校验、核心算法和结果返回三个部分。关键在于正确处理边界情况,例如空输入、非法参数和并发场景。ping pong 心跳检测连接存活,超时未 pong 则 terminate 断开。这些设计确保代码在生产环境中的健壮性。
使用建议
在实际项目中使用本示例时,建议先理解带心跳的 WebSocket 服务端的适用场景与限制条件。broadcast 向所有开放连接广播消息。根据具体业务需求调整参数配置,并编写单元测试覆盖正常路径与边界情况。本代码片段可直接集成到现有项目中,或作为参考实现自行扩展。
代码示例
import{WebSocketServer}from'ws';export function createWSServer({port=8080,heartbeatInterval=30000,heartbeatTimeout=10000}={}){const wss=new WebSocketServer({port});const clients=new Set();wss.on('connection',(ws)=>{clients.add(ws);ws.isAlive=true;ws.on('pong',()=>ws.isAlive=true);ws.on('close',()=>clients.delete(ws));});const heartbeat=setInterval(()=>{for(const ws of clients){if(!ws.isAlive){ws.terminate();clients.delete(ws);continue;}ws.isAlive=false;ws.ping();}},heartbeatInterval);function broadcast(message){const data=JSON.stringify(message);for(const ws of clients)if(ws.readyState===ws.OPEN)ws.send(data);}return{wss,broadcast,close:()=>{clearInterval(heartbeat);wss.close();}};}