1. 首先服务器要安装node.js。
我是在阿里云上操作,运行下面的指令
sudo apt update
sudo apt install nodejs npm
2. 创建项目文件夹
mkdir websockets
cd websockets
npm install ws
3. 修改代码
package.json文件代码如下:
{
"type": "module",
"dependencies": {
"ws": "^8.18.1"
}
}
index.js文件代码如下:
import { WebSocketServer } from 'ws';
import readline from 'readline';
// 创建 readline 接口,用于从命令行读取输入
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
// 用一个数组保存所有已连接的客户端
const clients = [];
const wss = new WebSocketServer({ port: 8080 });
// 当有新客户端连接时
wss.on('connection', (ws) => {
console.log('Client is connected');
clients.push(ws);
ws.on('message', (data) => {
console.log('received: %s', data);
});
ws.on('close', () => {
console.log('Client is disconnected');
// 从数组移除断开连接的客户端
const index = clients.indexOf(ws);
if (index !== -1) {
clients.splice(index, 1);
}
});
});
// 手动广播消息的函数
function broadcastMessage(message) {
clients.forEach((client) => {
if (client.readyState === 1) { // 1 代表 WebSocket 处于 OPEN 状态
client.send(message);
}
});
}
// 监听命令行的输入,每敲一次回车就发送一次输入的内容给所有客户端
rl.on('line', (line) => {
// 这里可以处理对输入的进一步解析和处理,然后再发送
broadcastMessage(line);
console.log(`Sent to all clients: ${line}`);
});
console.log('WebSocket server started on ws://localhost:8080');
console.log('在控制台输入要发送的内容并回车,即可发送给所有连接的客户端');
4. 运行命令 node index.js
5.可以使用Postman作为客户端,请求地址可设置为ws://IP地址:8080
6. 如果遇到问题,可以运行命令
netstat -tulnp | grep 8080
这个命令可检查占用8080端口的进程是哪个。这个命令可以关闭对应的进程
sudo kill 进程ID