千家信息网

nodejs中怎么构建一个UDP服务

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,本篇文章为大家展示了nodejs中怎么构建一个UDP服务,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.UDP简介User Datagram Protoco
千家信息网最后更新 2025年01月31日nodejs中怎么构建一个UDP服务

本篇文章为大家展示了nodejs中怎么构建一个UDP服务,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。


1.UDP简介
  • User Datagram Protocol,又称用户数据报协议

  • 和TCP一样,位于网络传输层用于处理数据包

  • UDP 最大特点无连接

  • UDP 传输速度快

  • UDP 数据传输不可靠

    • 不提供数据包分组,组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全到达的

    • 可靠性应由应用层负责

  • 支持一对一通信,也支持一对多通信

  • 许多关键的互联网应用程序使用UDP

    • 如DNS域名服务系统、TFTP简单文件传输协议,DHCP动态主机设置协议等

  • UDP适用于对书读要求比较高,对数据质量要求不严谨的应用

    • 如流媒体,实时多人游戏,实时音视频

1.1 TCP和UDP
  • | UDP | TCP ---|---|--- 连接| 无连接 | 面向连接 速度| 无需建立连接,速度较快 | 需要建立连接,速度较慢 目的主机 | 一对一,一对多 | 仅能一对一 带宽 | UDP报头较短,消耗带宽更少 | 消耗更多的带宽(报文较大) 消息边界 | 有 | 无 可靠性 | 低 | 高 顺序 | 无序 | 有序

  • 事实上,UDP 协议的这种乱序性基本上很少出现,通常只会在网络非常拥堵的情况下出现;

什么时候用TCP?什么时候用UDP ?

  • 对速度要求比较高的时候用UDP, 例如视频聊天,qq聊天

  • 对数据安全性要求比较高的时候用TCP,例如数据传输,文件下载

  • 假如对于视频聊天来说,如果画质优先就选用TCP,如果流畅度优先就选用UDP

1.2 UDP的三种传播方式
  1. UDP单播

    • 单播的地址为单一目标的一种传播方式

    • 地址范围:0.0.0.0 ~ 223.255.255.255

  2. UDP广播

    • 受限广播:它不会被路由转发,IP地址网络字段和主机字段全为1就是地址255.255.255.255

    • 直接广播:它会被路由转发,IP地址的网络字段定义这个网络,主机字段通常为1,如:192.168.10.255

    • 目的地址为网络中的所有设备

    • 地址范围分两种

  3. UDP组播

    • 多播也叫组播,把一组信息传递给一组目的地地址

  • 单播一对多

    • 单播通信中每一个数据包都有确切的IP地址

    • 对于同一份数据,如果存在多个接收者,Server需发送与接受者数目相同的单播数据包

    • 当接收者成百上千,将极大的家中Server的负担

  • 广播面对一对多

    • 广播数据包被限制在局域网中

    • 一旦有设备发送把广播数据则广播域内所有设备都收到这个数据包,并且不得不消耗资源去处理,大量的广播数据包将消耗网络的宽带及设备资源

    • 在IPv6中,广播的传输方式被取消

  • 组播面对一对多

    • 组播非常适合一对多的模型,只有加入到特定的组播成员,才会接收到组播数据。当存在多个组播成员时,源无需发送多个数据拷贝,仅需发送一份即可,组播网络设备会根据实际需要转发或拷贝组播数据

    • 数据流只发送给加入该组组播组的接受者(组成员),而不需要该数据的设备不会接收到该组播流量

    • 相同的组播报文,在一段链路上仅有一份数据,大大提高了网络资源的利用率

2. Node中的dgram模块

  • node的dgram模块用于构建UDP服务

  • 使用该模块创建UDP套接字非常简单,UDP套接字一旦创建,既可以作为客户端发送数据,也可以作为服务器接收数据;

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消息;

  • sever.js

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);
  • client.js

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服务,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

数据 地址 广播 网络 成功 消息 服务 设备 传输 主机 速度 字段 客户 客户端 成员 时候 消耗 监听 一对一 口号 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 医药行业信息网络安全 资产负债率在数据库哪里 case与软件开发环境 兼职手机软件开发 卫辉软件开发哪家价格实惠 北京哪里有软件开发人才 xbox服务器实时监测 小县城互联网科技创业 新一代网络技术视频教程 广州期货手机交易软件开发 小的软件开发公司都在做什么 小程序应用软件开发 个人接单软件开发合同 软件开发和环境艺术哪个好 四川成都软件开发外包 美国人为什么不信任网络安全 毕业季科技互联网靠谱吗 主机屋259终身服务器 软件开发工程师简历内容 oracle数据库安转 提供网络技术支持罪量刑标准 通信网络安全实验一 海州区有名的网络技术创新服务 浴血长空的服务器在哪 成都东软学院计算机网络技术 为什么幻塔没法连接服务器 网络安全中篡改名词解释 地铁逃生服务器为什么连不上 数据库需求分析阶段任务 网络安全方面的专业网站
0