在Node.js中连接WebSocket可以使用多种库,其中最流行的是ws库。ws是一个高性能且易于使用的WebSocket库,广泛应用于Node.js项目中。下面我将详细介绍如何使用ws库来创建WebSocket客户端和服务器端。
安装ws库
首先,你需要安装ws库。可以通过npm来安装:
npm install ws
创建WebSocket服务器端
示例代码
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
// 链接端口
wss.on('connection', function connection(ws) {
console.log('Client connected.');
// 监听消息返回
ws.on('message', function incoming(message) {
console.log('received: %s', message);
// Echo the message back to the client
ws.send(`Echo: ${message}`);
});
// 监听关闭websocket
ws.on('close', function close() {
console.log('Client disconnected.');
});
});
console.log('WebSocket server is listening on port 8080.');
这段代码创建了一个监听在8080端口的WebSocket服务器。每当有客户端连接时,它都会打印一条消息,并且当接收到客户端发送的消息时,会回显给客户端。
创建WebSocket客户端端
示例代码
const WebSocket = require('ws');
const ws = new WebSocket('ws://localhost:8080');
ws.on('open', function open() {
console.log('Connected to server.');
ws.send('Hello, Server!');
});
ws.on('message', function incoming(data) {
console.log('received: %s', data);
});
ws.on('close', function close() {
console.log('Disconnected from server.');
});
创建了一个连接到ws://localhost:8080的WebSocket客户端。一旦连接成功,它会发送一条消息给服务器,并且接收来自服务器的消息。
示例
- 启动服务器:运行服务器端脚本。
- 启动客户端:运行客户端脚本。
你可以多次启动客户端脚本来测试多个客户端连接到服务器的情况。
附加功能
ws库提供了很多高级功能,例如:
- 发送二进制数据:使用Buffer对象发送二进制数据。
- 压缩:启用压缩以减少数据传输量。
- 心跳检测:定期发送心跳包以保持连接活跃。
示例:发送二进制数据
// 服务器端
ws.send(Buffer.from('Hello in binary'));
// 客户端端
ws.send(Buffer.from('Binary data'));
示例:启用压缩
const WebSocket = require('ws');
const wss = new WebSocket.Server({
port: 8080,
perMessageDeflate: true
});
// ...
示例:设置心跳
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) {
ws.isAlive = true;
ws.on('pong', function pong() {
ws.isAlive = true;
});
setInterval(function ping() {
if (!ws.isAlive) return ws.terminate();
ws.isAlive = false;
ws.ping(() => {});
}, 30000); // 心跳间隔设为30秒
});
// ...
使用ws库创建WebSocket服务器和客户端非常简单直观。你可以根据实际需求调整代码,添加更多的功能。如果你需要更复杂的功能,比如认证、授权或与现有Web应用集成,可以考虑使用其他库,例如socket.io,它提供了更多高级功能,并且支持WebSocket以及其他传输方式。