WebSocket通过HTTP升级握手建立TCP上的持久双向通信,客户端用new WebSocket()连接并监听onopen/onmessage,服务端用ws库广播消息,需处理重连、心跳、鉴权等优化。

用 JavaScript 实现实时聊天应用,核心在于建立客户端与服务端之间的持久、双向通信通道——WebSocket 正是为此而生。它不像 HTTP 那样每次请求都要重新握手,而是建立一次连接后,双方可以随时互相发消息,延迟低、开销小。
WebSocket 协议在 TCP 之上,通过一次 HTTP 升级(Upgrade)握手完成连接建立。成功后,连接保持打开状态,客户端和服务端都能主动发送数据(文本或二进制),无需轮询或长连接模拟。
关键点:
HTML 中放一个输入框、一个发送按钮、一个消息列表容器:
立即学习“Java免费学习笔记(深入)”;
<input id="msgInput" placeholder="输入消息"> <button id="sendBtn">发送</button> <div id="chatBox"></div>
JavaScript 初始化连接并处理交互:
一套面向小企业用户的企业网站程序!功能简单,操作简单。实现了小企业网站的很多实用的功能,如文章新闻模块、图片展示、产品列表以及小型的下载功能,还同时增加了邮件订阅等相应模块。公告,友情链接等这些通用功能本程序也同样都集成了!同时本程序引入了模块功能,只要在系统默认模板上创建模块,可以在任何一个语言环境(或任意风格)的适当位置进行使用!
0
const ws = new WebSocket('ws://localhost:8080');
ws.onopen = () => {
console.log('已连接到聊天服务器');
};
ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
const p = document.createElement('p');
p.textContent = `[${msg.user}]: ${msg.text}`;
document.getElementById('chatBox').appendChild(p);
document.getElementById('chatBox').scrollTop = document.getElementById('chatBox').scrollHeight;
};
ws.onerror = (err) => console.error('WebSocket 错误:', err);
ws.onclose = () => console.log('连接已关闭');
document.getElementById('sendBtn').onclick = () => {
const input = document.getElementById('msgInput');
const text = input.value.trim();
if (text && ws.readyState === WebSocket.OPEN) {
ws.send(JSON.stringify({ user: '游客', text }));
input.value = '';
}
};
安装依赖:npm install ws
创建 server.js:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
// 存储所有连接的客户端(简单场景可用数组,生产环境建议用 Map 或 Redis)
const clients = new Set();
wss.on('connection', (ws, req) => {
console.log('新用户连接');
clients.add(ws);
ws.on('message', (data) => {
try {
const msg = JSON.parse(data);
// 广播给所有客户端(包括自己),也可排除发送者
clients.forEach(client => {
if (client.readyState === WebSocket.OPEN) {
client.send(JSON.stringify({
user: msg.user || '匿名',
text: msg.text || ''
}));
}
});
} catch (e) {
console.error('消息解析失败:', e);
}
});
ws.on('close', () => {
console.log('用户断开');
clients.delete(ws);
});
});
console.log('WebSocket 服务运行在 ws://localhost:8080');
运行:node server.js,前端即可连接。
原生 WebSocket 功能精简,实际项目中常需补充能力:
基本上就这些。WebSocket 本身不复杂,但容易忽略错误处理、连接状态管理和消息可靠性。从原生入手理解原理,再过渡到成熟方案,是稳妥的路径。
以上就是如何用JavaScript实现一个实时聊天应用_WebSocket如何建立双向通信?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号