Node.js 创建 UDP 服务
dgram 模块是 Node.js 中用于提供 UDP 套接字的模块。它支持通过用户数据报协议 (UDP) 进行通信。UDP 是一种无连接的协议,因此不像 TCP 那样需要建立和维护连接,适用于低延迟、不需要确保可靠传输的场景。
1. 基本使用
1.1. 创建 UDP 套接字
const dgram = require('dgram');
const socket = dgram.createSocket('udp4'); // 创建一个 UDP4 (IPv4) 的套接字,或者用 'udp6' 来支持IPv 6
1.2. 绑定到端口
socket.bind(41234); // 绑定到端口号 41234
1.3. 发送消息
const message = Buffer.from('Hello UDP!');
socket.send(message, 0, message.length, 41234, 'localhost', (err) => {if (err) console.error(err);else console.log('Message sent!');
});
1.4. 接收消息
socket.on('message', (msg, rinfo) => {console.log(`Received message: ${msg} from ${rinfo.address}:${rinfo.port}`);
});
1.5. 关闭套接字
socket.close(); // 关闭 UDP 套接字
1.6. 错误处理
socket.on('error', (err) => {console.error(`Socket error: ${err}`);socket.close();
});
2. 完整的 UDP 示例
2.1. UDP 服务器
const dgram = require('dgram');
const server = dgram.createSocket('udp4');server.on('error', (err) => {console.log(`Server error: ${err}`);server.close();
});server.on('message', (msg, rinfo) => {console.log(`Server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
});server.on('listening', () => {const address = server.address();console.log(`Server listening on ${address.address}:${address.port}`);
});server.bind(41234); // 监听 41234 端口
2.2. UDP 客户端
const dgram = require('dgram');
const client = dgram.createSocket('udp4');const message = Buffer.from('Hello, Server!');
client.send(message, 41234, 'localhost', (err) => {client.close();
});
3. 常用事件
message:当接收到消息时触发。
error:当套接字发生错误时触发。
listening:当服务器成功绑定并开始监听时触发。
close:当套接字关闭时触发。
4. 适用场景
网络广播。
轻量级、低延迟通信,如实时游戏或流媒体。
对可靠性要求不高的数据传输,如 DNS 查询。