2026/4/6 7:31:57
网站建设
项目流程
做饼的网站,wordpress开发难吗,制作网站的要素,营销型网站制作平台❤ 写在前面
如果觉得对你有帮助的话#xff0c;点个小❤❤ 吧#xff0c;你的支持是对我最大的鼓励~
个人独立开发wx小程序#xff0c;感谢支持#xff01;你是否曾经在网页聊天室中看到消息瞬间出现#xff0c;或者在股票网站上看到股价实时跳动#xff0c;却不知道背后…❤ 写在前面如果觉得对你有帮助的话点个小❤❤ 吧你的支持是对我最大的鼓励~个人独立开发wx小程序感谢支持你是否曾经在网页聊天室中看到消息瞬间出现或者在股票网站上看到股价实时跳动却不知道背后是如何实现的今天我们就来揭开实时通信的神秘面纱 为什么需要WebSocket想象一下这个场景你想通过网页和朋友实时聊天。传统方法不断敲门问“有新消息吗”传统HTTP通信就像这样你有新消息吗 服务器没有1秒后 你有新消息吗 服务器没有1秒后 你有新消息吗 服务器有消息是“你好”这种方法效率低下浪费资源而且有延迟1. 请求: 有新消息吗2. 响应: 没有3. 等待1秒4. 请求: 有新消息吗5. 响应: 消息: 你好客户端服务器 WebSocket直接装个对讲机WebSocket就像在客户端和服务器之间安装了一部对讲机初次握手客户端说“我想建立WebSocket连接”连接建立服务器回答“好的连接已建立”自由通话双方可以随时互相发送消息1. HTTP握手请求2. 握手响应3. WebSocket连接建立4. 实时双向通信5. 实时双向通信客户端服务器 手把手实战创建简单聊天室1. 服务器端Node.js ws库// server.jsconstWebSocketrequire(ws);// 创建WebSocket服务器监听8080端口constwssnewWebSocket.Server({port:8080});console.log(WebSocket服务器已启动端口8080);// 当有客户端连接时wss.on(connection,(ws){console.log(新客户端已连接);// 向客户端发送欢迎消息ws.send(欢迎来到聊天室);// 监听客户端发来的消息ws.on(message,(message){console.log(收到消息:,message.toString());// 广播消息给所有客户端wss.clients.forEach((client){if(client.readyStateWebSocket.OPEN){client.send(用户说:${message});}});});// 客户端断开连接时ws.on(close,(){console.log(客户端已断开连接);});});2. 客户端HTML JavaScript!-- index.html --!DOCTYPEhtmlhtmlheadtitleWebSocket聊天室/titlestylebody{font-family:Arial,sans-serif;max-width:600px;margin:0 auto;padding:20px;}#messages{border:1px solid #ccc;height:300px;overflow-y:auto;padding:10px;margin-bottom:10px;border-radius:5px;}.message{margin:5px 0;padding:8px;background-color:#f0f0f0;border-radius:4px;}.message.system{background-color:#e3f2fd;color:#1565c0;}input, button{padding:10px;font-size:16px;}button{background-color:#4CAF50;color:white;border:none;cursor:pointer;}button:hover{background-color:#45a049;}/style/headbodyh1✨ 简易聊天室 ✨/h1dividmessages/divdivinputtypetextidmessageInputplaceholder输入消息...stylewidth:70%;buttononclicksendMessage()stylewidth:25%;发送/button/divpidstatus正在连接服务器.../pscript// 创建WebSocket连接constsocketnewWebSocket(ws://localhost:8080);// 连接建立时socket.onopen(){document.getElementById(status).innerHTML✅ 已连接到聊天室;addMessage(系统,你已进入聊天室,true);};// 收到消息时socket.onmessage(event){addMessage(系统,event.data,true);};// 连接关闭时socket.onclose(){document.getElementById(status).innerHTML❌ 连接已断开;};// 发送消息函数functionsendMessage(){constinputdocument.getElementById(messageInput);constmessageinput.value.trim();if(messagesocket.readyStateWebSocket.OPEN){socket.send(message);addMessage(我,message,false);input.value;input.focus();}}// 添加消息到聊天窗口functionaddMessage(sender,text,isSystem){constmessagesDivdocument.getElementById(messages);constmessageDivdocument.createElement(div);messageDiv.classNamemessage${isSystem?system:};messageDiv.innerHTMLstrong${sender}:/strong${text};messagesDiv.appendChild(messageDiv);messagesDiv.scrollTopmessagesDiv.scrollHeight;}// 按Enter键发送消息document.getElementById(messageInput).addEventListener(keypress,(e){if(e.keyEnter){sendMessage();}});/script/body/html 运行步骤安装依赖npminstallws启动服务器nodeserver.js打开客户端双击index.html或用本地服务器打开测试聊天打开多个浏览器窗口互相发送消息 WebSocket的优势总结特性HTTP轮询WebSocket连接方式每次请求新建连接一次连接长期使用实时性有延迟依赖轮询间隔真正实时资源消耗高频繁建立连接低一个连接搞定数据传输只能客户端主动请求双向主动推送头部开销每次都有完整HTTP头部建立后只有少量数据头 实际应用场景实时聊天应用微信网页版、Slack在线协作工具Google Docs实时协作股票交易平台实时股价更新多人在线游戏实时位置同步IoT物联网设备状态实时监控实时通知新邮件、新消息提醒️ 进阶技巧1. 断线重连letreconnectInterval1000;// 1秒后重试letmaxReconnectInterval30000;// 最大30秒functionconnect(){constsocketnewWebSocket(ws://localhost:8080);socket.onclose(){setTimeout((){reconnectIntervalMath.min(reconnectInterval*1.5,maxReconnectInterval);connect();// 重新连接},reconnectInterval);};}2. 心跳检测// 定期发送心跳包保持连接活跃setInterval((){if(socket.readyStateWebSocket.OPEN){socket.send(JSON.stringify({type:heartbeat}));}},30000);// 每30秒一次3. 消息格式标准化// 使用JSON格式的消息constmessage{type:chat,// 消息类型chat、join、leave等user:小明,content:大家好,timestamp:Date.now()};socket.send(JSON.stringify(message)); 学习资源推荐MDN WebSocket文档最权威的参考资料Socket.IO功能更丰富的实时通信库ws库文档Node.js WebSocket服务器库WebSocket RFC深入理解协议细节 小结WebSocket让网页从被动的“问-答”模式变成了主动的“对话”模式为实时Web应用打开了大门。虽然本文只是入门介绍但已经涵盖了WebSocket的核心概念和基本用法。记住这个简单的比喻HTTP轮询像不断打电话问“到了吗到了吗”WebSocket像打开视频通话随时能看到对方现在你已经掌握了让网页“活”起来的关键技术快去创建你自己的实时应用吧无论是聊天室、实时仪表盘还是在线游戏WebSocket都能让你的应用体验更上一层楼有什么问题或想了解更多欢迎在评论区交流