Node.js中的WebSocket:用于实时通信的ws库

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

ws 库:用于 Node.js 的 WebSocket



ws 库是 Node.js 的一个简单、快速且经过全面测试的 WebSocket 协议实现。它是在服务器端 JavaScript 中创建实时应用程序(聊天、在线游戏、通知、协同编辑)的事实标准。与内置的 http 模块不同,ws 在客户端和服务器之间提供完整的双向通信,无需持续的 HTTP 请求。



主要特性

  • 完全支持 RFC 6455 协议 — 适用于所有现代浏览器。
  • 高性能 — 内存占用低,延迟小。
  • 简单的 API — 只需几行代码即可创建服务器和客户端。
  • 支持扩展 — 数据压缩 (permessage-deflate)。
  • 与 HTTP 服务器集成 — 可以与 Express 或其他框架共享端口。
  • 自动重连 — 客户端内置机制。


安装

通过 npm 安装:

npm install ws

安装后,库即可使用。



创建 WebSocket 服务器

创建一个简单的服务器,接受连接并发送欢迎消息:

const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) { console.log('新客户端已连接');

// 向客户端发送消息 ws.send('欢迎来到 WebSocket 服务器!');

// 处理传入消息 ws.on('message', function incoming(message) { console.log('收到: %s', message); // 发送回去(回声) ws.send('回声: ' + message); });

// 处理连接关闭 ws.on('close', function() { console.log('客户端已断开连接'); });});

console.log('WebSocket 服务器已启动在 ws://localhost:8080');


创建 WebSocket 客户端

客户端连接到服务器,发送消息并接收响应:

const WebSocket = require('ws');

const ws = new WebSocket('ws://localhost:8080');

ws.on('open', function open() { console.log('连接已建立'); ws.send('你好,服务器!');});

ws.on('message', function incoming(data) { console.log('服务器响应: %s', data); ws.close();});

ws.on('close', function() { console.log('连接已关闭');});

ws.on('error', function error(err) { console.error('错误:', err.message);});


使用 JSON 和多客户端

一个实际的例子——一个向所有连接的客户端广播消息的聊天服务器:

const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws, req) { console.log('客户端已连接。总客户端数:', wss.clients.size);

ws.on('message', function incoming(message) { // 解析 JSON let data; try { data = JSON.parse(message); } catch (e) { ws.send(JSON.stringify({ error: '无效的 JSON' })); return; }

// 向除发送者之外的所有人广播 wss.clients.forEach(function each(client) { if (client !== ws && client.readyState === WebSocket.OPEN) { client.send(JSON.stringify({ username: data.username, text: data.text, timestamp: Date.now() })); } }); });

ws.send(JSON.stringify({ system: '欢迎来到聊天室!' }));});

客户端可以发送 JSON:

ws.send(JSON.stringify({ username: '爱丽丝', text: '大家好!' }));


与 HTTP 服务器集成

推荐