我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Nodejs使用dgram模块创建UDP服务详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Nodejs使用dgram模块创建UDP服务详解

引言

之前我们介绍了使用 Nodejs 的 net 模块基于 Socket 创建 TCP 协议的服务,同时利用浏览器与我们创建的服务进行了连接,今天我们看一下怎么用 Nodejs 创建 UDP 服务。

UDP又称用户数据包协议,与TCP一样同属于网络传输层。UDP与TCP最大的不同是UDP是无连接的。TCP中连接一旦建立,所有的会话都基于连接完成,客户端如果要与另一个TCP服务通信,需要另创建一个套接字socket来完成连接。

在UDP中,它提供面向事务的简单不可靠信息传输服务,在网络差的情况下存在丢包严重的问题。但是由于它无须连接,资源消耗低,处理快速且灵活,所以常常应用在那种偶尔丢一两个数据包也不会产生重大影响的场景:比如音视频、流媒体服务等。目前DNS服务、HTTP/3都是基于它实现的。

创建一个 UDP 通信

创建 UDP 套接字

你可以通过 dgram 模块提供的方法来创建UDP套接字:

const datagram = require("dgram");
const socket = datagram.createSocket("udp4");

? UDP套接字一旦创建,既可以作为客户端发送数据,也可以作为服务器端接收数据。

绑定端口

若想让UDP套接字接收网络消息,只要调用 dgram.bind(port, [address]) 方法对网卡和端口进行绑定即可:

const datagram = require("dgram");
const socket = datagram.createSocket("udp4");
socket.on('message', (msg, rinfo) => {
    console.log(`server got message: ${msg} from ${rinfo.address}:${rinfo.port}`);
    // 3s后关闭此连接
    setTimeout(() => {
        socket.close();
    }, 3000)
});
socket.on('listening', () => {
    const address = socket.address();
    console.log("server listening:", address.address + ":" + address.port);
});
socket.on('close', () => {
    console.log('closed server!');
})
socket.bind(41234);

? 该套接字将接收所有网卡上41234端口上的消息。在绑定完成后,将触发listening事件。

创建服务端

现在让我们创建一个服务端来与刚才的服务进行通信:

const dgram = require("dgram");
const client = dgram.createSocket("udp4");
// 创建 Buffer 流
const message = new Buffer.from("你好,upd服务端!");
client.send(message, 0, message.length, 41234, '127.0.0.1', (err, bytes) => {
    client.close();
});

? socket.send(buf, offset, length, port, address, [callback]) 可以将客户端信息发送到目标地址。这些参数分别为要发送的Buffer、Buffer的偏移、Buffer的长度、目标端口、目标地址、发送完成后的回调。

与TCP套接字的write()相比,send()方法的参数列表相对复杂,但是它更灵活的地方在于可以随意发送数据到网络中的服务器端,而TCP如果要发送数据给另一个服务器端,则需要重新通过套接字构造新的连接。

最终运行效果:

UDP 套接字事件

UDP套接字相对TCP套接字使用起来更简单,它只是一个 EventEmitter 的实例,而非 Stream 的实例。它具备如下自定义事件:

  • message:当UDP套接字侦听网卡端口后,接收到消息时触发该事件,触发携带的数据为消息Buffer对象和一个远程地址信息。
  • listening:当UDP套接字开始侦听时触发该事件。
  • close:调用close()方法时触发该事件,并不再触发message事件。
  • error:当异常发生时触发该事件,如果不侦听,异常将直接抛出,使进程退出。

总结

TCP与UDP都属于互联网中传输层的协议,如果要构造高效的网络应用,就应该从传输层进行着手。但是对于经典的应用场景,则无须从传输层协议入手构造自己的应用。比如HTTP、FTP等,这些经典的应用层协议对于普通应用而言绰绰有余。Node提供了基本的 httphttps 模块用于HTTP和HTTPS的封装,而对于其他应用层协议的封装,你可以在社区中找到其实现。

以上就是Nodejs使用dgram模块创建UDP服务详解的详细内容,更多关于Nodejs dgram模块创建UDP的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Nodejs使用dgram模块创建UDP服务详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Nodejs使用dgram模块创建UDP服务详解

这篇文章主要为大家介绍了Nodejs使用dgram模块创建UDP服务详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

Nodejs+express模块如何创建一个服务器

这篇文章给大家分享的是有关Nodejs+express模块如何创建一个服务器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。使用express模块创建一个服务器新建一个文件夹,文件夹名字非中文,名字也不要和模块名字
2023-06-14

一文详解nodejs的path模块使用

这篇文章主要为大家介绍了nodejs的path模块使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-16

轻松创建nodejs服务器(3):代码模块化

nodejs的功能块大都以模块的形式存在的。 通常会有一个统一入口index.js,然后调用不同的模块来完成我们需要的功能。 我们先来看看怎么把server.js变成一个模块让 index.js 主文件使用。var http = requi
2022-06-04

使用python怎么创建一个UDP服务器

这篇文章给大家介绍使用python怎么创建一个UDP服务器,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解决问题,而不是搞明白语言本
2023-06-14

Python利用Beautiful Soup模块创建对象详解

安装 通过 pip 安装 Beautiful Soup 模块:pip install beautifulsoup4 。 还可以使用 PyCharm IDE 来写代码,在 PyCharm 中的 Preferences 中找到 Project
2022-06-04

nodejs express路由匹配控制及Router模块化使用详解

这篇文章主要为大家介绍了nodejs express路由匹配控制及Router模块化使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

前端必会的nodejs知识工具模块使用示例详解

这篇文章主要为大家介绍了前端必会的nodejs知识工具模块使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

详解使用Maven构建多模块项目(图文)

Maven多模块项目,适用于一些比较大的项目,通过合理的模块拆分,实现代码的复用,便于维护和管理。尤其是一些开源框架,也是采用多模块的方式,提供插件集成,用户可以根据需要配置指定的模块。项目结构如下:     test-hd-parent
2023-05-31

详解在Spring3中使用注解(@Scheduled)创建计划任务

Spring3中加强了注解的使用,其中计划任务也得到了增强,现在创建一个计划任务只需要两步就完成了: 创建一个Java类,添加一个无参无返回值的方法,在方法上用@Scheduled注解修饰一下; 在Spring配置文件中添加三个
2023-05-31

详解使用vscode+es6写nodejs服务端调试配置

前端的小伙伴们在babel等的加持下,已经可以愉快的使用es6来写代码了。 然后对于服务端的nodejs就有点坑爹了,虽然原生支持了es6,但是只是部分支持,一些不支持的特性(比如module)使用了就会报错,所以如果想使用完整的es6来写
2022-06-04

阿里云服务器解析模块的详细位置与使用方法

阿里云服务器是阿里云提供的弹性计算服务,能够帮助用户快速、便捷地搭建和管理自己的云服务器。本文将详细介绍阿里云服务器解析模块的位置以及如何使用这个模块。正文:阿里云服务器解析模块是阿里云服务器提供的一种服务,可以帮助用户解析域名,将其转换为服务器可以访问的IP地址。这样,用户就可以通过域名访问自己的服务器了。阿里
阿里云服务器解析模块的详细位置与使用方法
2023-10-30

java使用xfire搭建webservice服务的过程详解

使用XFire搭建Web服务的过程如下:1. 导入XFire库:将XFire库添加到Java项目的类路径中。可以从XFire官方网站(http://xfire.codehaus.org/)下载最新版本的XFire库。2. 创建服务接口:在J
2023-08-11

编程热搜

目录