如何在Ubuntu上使用Node.js进行实时通讯
在Ubuntu系统上利用Node.js搭建实时通讯服务时,有三种主流方案可供选择:第一种是轻量级WebSocket,实现高效全双工通信;第二种是Socket.IO,提供自动降级(例如长轮询)和便捷事件机制;第三种是Express整合Socket.IO,能统一处理HTTP请求和WebSocket消息,特别适合构建复杂的实时交互应用。
在Ubuntu上搭建实时通讯服务,Node.js 可以说是最趁手的工具之一。无论是简单的消息推送,还是复杂的多人协作应用,社区里都有成熟的方案可以拿来就用。下面梳理三种主流实践,从轻量 WebSocket 到全功能 Socket.IO,再到与 Express 整合的经典组合,总有一款适合你的场景。

1. WebSocket
WebSocket 是实时通讯的底层协议,能在单个 TCP 连接上实现全双工通信,延迟低、开销小,适合对性能要求苛刻的场景。
安装 Node.js 和 npm
先把基础环境准备好。如果系统里还没有 Node.js 和 npm,用下面两行命令搞定:
sudo apt update
sudo apt install nodejs npm
创建 WebSocket 服务器
接下来用 ws 这个轻量库来搭建服务端。先安装它:
npm install ws
然后写一个简单的服务器,监听 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);
});
ws.send('Hello! Message From Server!!');
});
创建 WebSocket 客户端
同样用 ws 库写一个客户端,连接上去之后主动发消息,并接收服务端的回复:
const WebSocket = require('ws');
const ws = new WebSocket('ws://localhost:8080');
ws.on('open', function open() {
ws.send('Hello! Message From Client!!');
});
ws.on('message', function incoming(data) {
console.log(data);
});
2. Socket.IO
如果你需要更完善的降级方案和事件机制,Socket.IO 是更省心的选择。它在 WebSocket 之上封装了一层,遇到不支持 WebSocket 的浏览器会自动回退到轮询等传统方式,而且内置了房间、命名空间等功能。
安装 Node.js 和 npm
同样,确保 Node.js 和 npm 已安装(前面已经装过的可以跳过)。
创建 Socket.IO 服务器
先安装 socket.io 库:
npm install socket.io
然后创建一个 HTTP 服务器,挂载 Socket.IO,监听 3000 端口。这里用了一个简单的聊天示例:每当有用户连接,就能收到消息并广播给所有人:
const http = require('http');
const socketIo = require('socket.io');
const server = http.createServer();
const io = socketIo(server);
io.on('connection', (socket) => {
console.log('a user connected');
socket.on('disconnect', () => {
console.log('user disconnected');
});
socket.on('chat message', (msg) => {
io.emit('chat message', msg);
});
});
server.listen(3000, () => {
console.log('listening on *:3000');
});
创建 Socket.IO 客户端
客户端需要另一个库 socket.io-client,先安装:
npm install socket.io-client
连接服务器后,发送一条聊天消息,并监听服务端广播过来的消息:
const io = require('socket.io-client');
const socket = io('http://localhost:3000');
socket.on('connect', () => {
console.log('connected to server');
socket.emit('chat message', 'Hello Server!');
});
socket.on('chat message', (msg) => {
console.log('message from server:', msg);
});
3. Express + Socket.IO
很多项目已经用 Express 搭建了 Web 服务,这时候把 Socket.IO 集成进来就非常自然。既能提供 HTTP 接口,又能处理 WebSocket 消息,一套代码搞定前后端通信。
安装 Node.js 和 npm
继续确保环境正常。
创建 Express + Socket.IO 服务器
先安装 express 和 socket.io:
npm install express socket.io
然后写一个服务器,把 Express 应用和 Socket.IO 挂载到同一个 HTTP 服务上,并提供一个 HTML 页面给客户端加载:
const express = require('express');
const http = require('http');
const socketIo = require('socket.io');
const app = express();
const server = http.createServer(app);
const io = socketIo(server);
app.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html');
});
io.on('connection', (socket) => {
console.log('a user connected');
socket.on('disconnect', () => {
console.log('user disconnected');
});
socket.on('chat message', (msg) => {
io.emit('chat message', msg);
});
});
server.listen(3000, () => {
console.log('listening on *:3000');
});
创建 HTML 客户端
在同级目录下创建 index.html,页面里包含一个消息列表和一个输入框,通过 Socket.IO 客户端发送和接收消息:
Socket.IO Chat
以上三步走下来,你已经在 Ubuntu 上跑起了实时通讯服务。从裸 WebSocket 到带降级方案的 Socket.IO,再到与 Express 整合的完整模型,每种方案在实际项目中都有各自的用武之地。根据业务需求选择合适的路线,然后按需扩展就好。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















