在Ubuntu上搞实时通信,Node.js搭配WebSocket几乎是标配方案。WebSocket这个协议大家应该不陌生,它能在单个TCP连接上实现全双工通信,简单说就是让服务端和客户端能随时互推数据,不需要像HTTP那样反复握手。下面直接上步骤,跟着走就能跑起来。

第一步,先把Node.js装上。如果你还没装,终端里跑这两行就行:
sudo apt update
sudo apt install nodejs npm
然后创建项目目录。新建一个文件夹,进去初始化Node项目,标准操作:
mkdir realtime-chat
cd realtime-chat
npm init -y
接下来安装WebSocket库。这里推荐ws,轻量稳定,npm一把梭:
npm install ws
核心环节:创建WebSocket服务器。新建一个server.js,写入以下代码。这段代码的逻辑很清晰——监听8080端口,收到客户端消息后,广播给所有其他连接的客户端(除了发消息的自己)。同时新连接会收到一条欢迎信息。
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('received: %s', message);
// Broadcast to all clients
wss.clients.forEach(function each(client) {
if (client !== ws && client.readyState === WebSocket.OPEN) {
client.send(message);
}
});
});
ws.send('You are connected to the WebSocket server!');
});
console.log('WebSocket server is running on ws://localhost:8080');
再搞一个客户端页面。新建client.html,代码量不大,就是个简易聊天界面:输入框、发送按钮、消息列表。Ja vaScript部分用原生WebSocket API连接服务器,收到消息就追加到列表,发送消息则调用send()。
WebSocket Client
WebSocket Client
最后跑起来看看效果。终端执行node server.js启动服务,然后用浏览器打开http://localhost:8080/client.html(注意这里不是直接访问文件路径,而是需要用一个HTTP服务器托管client.html,或者更简单地直接用npx serve之类的工具)。如果一切正常,你会看到连接成功的日志,发一条消息,所有打开的客户端页面都能收到广播。
至此,一个最基本的实时通信demo就搭好了。当然,这只是一个起点——你可以在此基础上做很多扩展,比如加入房间管理、用户身份认证、消息持久化,甚至结合WebRTC做音视频。从实践角度看,ws库的性能和稳定性在业界已经被广泛验证,值得信任。