本篇文章为大家展示了nodejs中怎么构建一个UDP服务,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
1.UDP简介
1.1 TCP和UDP
| UDP | TCP ---|---|--- 连接| 无连接 | 面向连接 速度| 无需建立连接,速度较快 | 需要建立连接,速度较慢 目的主机 | 一对一,一对多 | 仅能一对一 带宽 | UDP报头较短,消耗带宽更少 | 消耗更多的带宽(报文较大) 消息边界 | 有 | 无 可靠性 | 低 | 高 顺序 | 无序 | 有序
事实上,UDP 协议的这种乱序性基本上很少出现,通常只会在网络非常拥堵的情况下出现;
什么时候用TCP?什么时候用UDP ?
对速度要求比较高的时候用UDP, 例如视频聊天,qq聊天
对数据安全性要求比较高的时候用TCP,例如数据传输,文件下载
假如对于视频聊天来说,如果画质优先就选用TCP,如果流畅度优先就选用UDP
1.2 UDP的三种传播方式
UDP单播
UDP广播
UDP组播
单播一对多
广播面对一对多
组播面对一对多
组播非常适合一对多的模型,只有加入到特定的组播成员,才会接收到组播数据。当存在多个组播成员时,源无需发送多个数据拷贝,仅需发送一份即可,组播网络设备会根据实际需要转发或拷贝组播数据
数据流只发送给加入该组组播组的接受者(组成员),而不需要该数据的设备不会接收到该组播流量
相同的组播报文,在一段链路上仅有一份数据,大大提高了网络资源的利用率
2. Node中的dgram模块
const dgram = require('dgram')
const socket = dgram.createSocket('udp4')
2.1 socket方法
API | 说明 |
---|
bind() | 绑定端口和主机 |
address() | 返回Socket地址对象 |
close() | 关闭Socket并停止监听 |
send() | 发送消息 |
addMembership() | 添加组播成员 |
dropMembership() | 删除组播成员 |
setBroadcast() | 设置是否启用广播 |
setTTL() | 设置数据报生存时间 |
setMulticastTTL() | 设置组播数据报生存时间 |
2.2 Socket事件
API | 说明 |
---|
listening | 监听成功时触发,仅触发一次 |
message | 收到消息时触发 |
error | 发生错误时触发 |
close | 关闭socket时触发 |
#####. 使用Node实现UDP单播 |
|
const dgram = require('dgram')
const socket = dgram.createSocket('udp4')
socket.on('listening', () =>{
console.log('连接成功')
})
如果客户端没有绑定端口号,操作系统会自动分配一个端口号;如果指定了端口号,必须在socket的listening事件成功后才能send消息;
const dgram = require('dgram');
const server = dgram.createSocket('udp4');
server.on('listening', r => {
console.log('连接成功server:');
});
server.on('message', (msg, remoteAddress) => {
console.log(`成功连接到${remoteAddress.address}:${remoteAddress.port}`);
server.send('服务器说:小子我收到你的消息了', remoteAddress.port);
});
server.on('close', () => {
console.log('error');
});
server.bind(3000);
const dgram = require('dgram');
const client = dgram.createSocket('udp4');
client.on('listening', () => {
const address = client.address();
console.log(`成功连接到${address.address}:${address.port}`);
// 直接地址:192.168.10.255 把后三位改成255就可以
// 受限地址: 255.255.255.255
client.send('hello', 3000, 'localhost');
});
client.on('message', (msg, remoteAddress) => {
console.log(`客户端说收到服务器的消息了${msg}`);
});
client.on('error', () => {
console.log('server errord');
});
client.bind(3200);
4.使用Node实现UDP广播模式
// 在监听成功后,开启广播模式
server.on('listening', () =>{
server.setBroadcast(true)
})
5. 使用Node实现UDP组播
server.js
// 只用在发送消息时,指定组播ip就可以了
server.on('listening', () => {
server.send('发送组播消息', 3300, '224.0.1.100', (err) =>{
console.log(err)
})
})
client.js
client.on('listening', () =>{
// 监听成功后加入特定组播组的ip,此时客户端就会收到组播数据
client.addMemberShip('224.0.1.100')
} )
上述内容就是nodejs中怎么构建一个UDP服务,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注天达云行业资讯频道。