news 2026/6/26 13:46:00

WebSocket实战:让网页“活”起来!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
WebSocket实战:让网页“活”起来!

❤ 写在前面
如果觉得对你有帮助的话,点个小❤❤ 吧,你的支持是对我最大的鼓励~
个人独立开发wx小程序,感谢支持!


你是否曾经在网页聊天室中看到消息瞬间出现,或者在股票网站上看到股价实时跳动,却不知道背后是如何实现的?今天,我们就来揭开实时通信的神秘面纱!

🤔 为什么需要WebSocket?

想象一下这个场景:你想通过网页和朋友实时聊天。

传统方法:不断敲门问“有新消息吗?”

传统HTTP通信就像这样:

你:有新消息吗? 服务器:没有(1秒后) 你:有新消息吗? 服务器:没有(1秒后) 你:有新消息吗? 服务器:有!消息是“你好!”

这种方法效率低下,浪费资源,而且有延迟!

1. 请求: 有新消息吗?
2. 响应: 没有
3. 等待1秒
4. 请求: 有新消息吗?
5. 响应: 消息: '你好!'

客户端

服务器

🚀 WebSocket:直接装个对讲机!

WebSocket就像在客户端和服务器之间安装了一部对讲机:

  1. 初次握手:客户端说“我想建立WebSocket连接”
  2. 连接建立:服务器回答“好的,连接已建立”
  3. 自由通话:双方可以随时互相发送消息
1. HTTP握手请求
2. 握手响应
3. WebSocket连接建立
4. 实时双向通信
5. 实时双向通信

客户端

服务器

💻 手把手实战:创建简单聊天室

1. 服务器端(Node.js + ws库)

// server.jsconstWebSocket=require('ws');// 创建WebSocket服务器,监听8080端口constwss=newWebSocket.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.readyState===WebSocket.OPEN){client.send(`用户说:${message}`);}});});// 客户端断开连接时ws.on('close',()=>{console.log('客户端已断开连接');});});

2. 客户端(HTML + JavaScript)

<!-- index.html --><!DOCTYPEhtml><html><head><title>WebSocket聊天室</title><style>body{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></head><body><h1>✨ 简易聊天室 ✨</h1><divid="messages"></div><div><inputtype="text"id="messageInput"placeholder="输入消息..."style="width:70%;"><buttononclick="sendMessage()"style="width:25%;">发送</button></div><pid="status">正在连接服务器...</p><script>// 创建WebSocket连接constsocket=newWebSocket('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(){constinput=document.getElementById('messageInput');constmessage=input.value.trim();if(message&&socket.readyState===WebSocket.OPEN){socket.send(message);addMessage('我',message,false);input.value='';input.focus();}}// 添加消息到聊天窗口functionaddMessage(sender,text,isSystem){constmessagesDiv=document.getElementById('messages');constmessageDiv=document.createElement('div');messageDiv.className=`message${isSystem?'system':''}`;messageDiv.innerHTML=`<strong>${sender}:</strong>${text}`;messagesDiv.appendChild(messageDiv);messagesDiv.scrollTop=messagesDiv.scrollHeight;}// 按Enter键发送消息document.getElementById('messageInput').addEventListener('keypress',(e)=>{if(e.key==='Enter'){sendMessage();}});</script></body></html>

🎯 运行步骤

  1. 安装依赖
npminstallws
  1. 启动服务器
nodeserver.js
  1. 打开客户端
    双击index.html或用本地服务器打开

  2. 测试聊天
    打开多个浏览器窗口,互相发送消息!

🌟 WebSocket的优势总结

特性HTTP轮询WebSocket
连接方式每次请求新建连接一次连接,长期使用
实时性有延迟(依赖轮询间隔)真正实时
资源消耗高(频繁建立连接)低(一个连接搞定)
数据传输只能客户端主动请求双向主动推送
头部开销每次都有完整HTTP头部建立后只有少量数据头

🚀 实际应用场景

  1. 实时聊天应用:微信网页版、Slack
  2. 在线协作工具:Google Docs实时协作
  3. 股票交易平台:实时股价更新
  4. 多人在线游戏:实时位置同步
  5. IoT物联网:设备状态实时监控
  6. 实时通知:新邮件、新消息提醒

🛠️ 进阶技巧

1. 断线重连

letreconnectInterval=1000;// 1秒后重试letmaxReconnectInterval=30000;// 最大30秒functionconnect(){constsocket=newWebSocket('ws://localhost:8080');socket.onclose=()=>{setTimeout(()=>{reconnectInterval=Math.min(reconnectInterval*1.5,maxReconnectInterval);connect();// 重新连接},reconnectInterval);};}

2. 心跳检测

// 定期发送心跳包,保持连接活跃setInterval(()=>{if(socket.readyState===WebSocket.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));

📚 学习资源推荐

  1. MDN WebSocket文档:最权威的参考资料
  2. Socket.IO:功能更丰富的实时通信库
  3. ws库文档:Node.js WebSocket服务器库
  4. WebSocket RFC:深入理解协议细节

💡 小结

WebSocket让网页从被动的“问-答”模式变成了主动的“对话”模式,为实时Web应用打开了大门。虽然本文只是入门介绍,但已经涵盖了WebSocket的核心概念和基本用法。

记住这个简单的比喻

  • HTTP轮询:像不断打电话问“到了吗?到了吗?”
  • WebSocket:像打开视频通话,随时能看到对方

现在,你已经掌握了让网页“活”起来的关键技术!快去创建你自己的实时应用吧,无论是聊天室、实时仪表盘还是在线游戏,WebSocket都能让你的应用体验更上一层楼!

有什么问题或想了解更多?欢迎在评论区交流! 🎉

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/18 13:50:30

无影AgentBay Open-AutoGLM实战指南(从零构建自主AI代理)

第一章&#xff1a;无影AgentBay Open-AutoGLM概述无影AgentBay Open-AutoGLM 是阿里云推出的一款面向大模型智能体开发的开源框架&#xff0c;旨在降低构建、训练和部署自主智能体&#xff08;Autonomous Agents&#xff09;的技术门槛。该框架融合了 AutoML 与大语言模型&…

作者头像 李华
网站建设 2026/6/22 16:11:59

Qwen图像编辑快速入门:4步生成专业级图片的完整指南

Qwen图像编辑快速入门&#xff1a;4步生成专业级图片的完整指南 【免费下载链接】Qwen-Image-Edit-Rapid-AIO 项目地址: https://ai.gitcode.com/hf_mirrors/Phr00t/Qwen-Image-Edit-Rapid-AIO 在当今内容创作需求爆炸式增长的时代&#xff0c;快速生成高质量图像已成为…

作者头像 李华
网站建设 2026/6/22 17:34:17

理解qthread生命周期:Qt Creator环境下的通俗解释

QThread 从入门到精通&#xff1a;Qt 多线程开发的真正打开方式你有没有遇到过这样的场景&#xff1f;点击“开始处理”按钮后&#xff0c;界面瞬间卡住&#xff0c;进度条不动、按钮点不了&#xff0c;甚至连窗口都拖不动——用户只能干瞪眼&#xff0c;以为程序崩溃了。其实不…

作者头像 李华
网站建设 2026/6/24 23:27:02

为什么顶尖科技公司都在测试Open-AutoGLM订咖啡功能?(内部资料曝光)

第一章&#xff1a;Open-AutoGLM订咖啡现象级崛起的背后在人工智能与日常场景深度融合的今天&#xff0c;Open-AutoGLM 的“订咖啡”功能意外走红&#xff0c;成为人机交互史上的标志性事件。这一看似简单的任务背后&#xff0c;是大模型理解力、上下文推理与多系统协同能力的集…

作者头像 李华
网站建设 2026/6/17 17:06:06

PaddlePaddle镜像支持多租户模式,适用于共享GPU集群

PaddlePaddle镜像支持多租户模式&#xff0c;适用于共享GPU集群 在AI研发日益普及的今天&#xff0c;越来越多团队面临一个共同挑战&#xff1a;如何让多个项目组高效、安全地共用一套昂贵的GPU资源&#xff1f;尤其是在高校实验室、企业AI中台或云服务商环境中&#xff0c;不同…

作者头像 李华