前端需要去了解的nodejs知识(dgram)

简介: 对于前端开发,http服务是我们最长接触的通信服务,偶尔也会用到一些类似于聊天框的长链接应用,这些应用都不是基于HTTP开发的,HTTP是是无状态的短连接,说到长连接是不是首先会想到TCP,TCP是有状态的长连接协议。TCP和HTTP都是有连接的意思就是通信前需要建立连接,但是在计算机网络世界还有种无连接的协议UDP,下面我们就来了解下TCP在nodejs中的应用。

对于前端开发,http服务是我们最长接触的通信服务,偶尔也会用到一些类似于聊天框的长链接应用,这些应用都不是基于HTTP开发的,HTTP是是无状态的短连接,说到长连接是不是首先会想到TCP,TCP是有状态的长连接协议。TCP和HTTP都是有连接的意思就是通信前需要建立连接,但是在计算机网络世界还有种无连接的协议UDP,下面我们就来了解下TCP在nodejs中的应用。

dgram


UDP(用户数据报协议)协议

对于UDP,我们可以结合TCP一起来看,他们之间的区别以及共同之处。

网络异常,图片无法展示
|

  • UDP是无连接的用户数据报协议
  • UDP是不可靠的传输,数据在传输过程中可能会丢失
  • UDP的传输速度是更快的
  • UDP的连接是可以一对一,一对多,多对多,多对一的
  • UDP应用场合:流媒体或游戏之类对数据准确性要求不是很高的应用,例如我们常用的视频通话,目前发展比较好的智能家居也是基于UDP在传输协议

nodejs中的dgram

  • nodejs中dgram的UDP传输共有三种,分别为:单播,组播,广播
  • 单播:服务端向单个客户端发送数据
const dgram =require('dgram');
const server = dgram.createSocket('udp4');
server.on('listening',()=>{
    var address=server.address();
    console.log('listening on:'+address.address+':'+address.port)
})
// 单播发送数据
server.on('message',(message,remote)=>{
    console.log('收到了你的消息: ', message.toString());
    const address = remote.address;
    console.log('remote.address: ', remote.address);
    const port = remote.port;
    console.log('remote.port: ', remote.port);
    // server.send('我已经收到你们发送的消息了!',port,address)
})
server.on('error',()=>{
    console.log('服务其出错了');
})
//绑定8888端口
server.bind(4000)
  • 广播、组播:通过ip和子网掩码计算出广播地址
const dgram =require('dgram');
const server = dgram.createSocket('udp4');
const multicastAddr = "*******"
server.on('listening',()=>{
    var address=server.address();
    //设置广播发送
    server.setBroadcast(true);
    server.setMulticastTTL(128);
    setInterval(()=>{
        console.log('发送消息')
        server.send('我已经上线了!',5000,'广播地址**')
        server.send('大家好啊,我是服务端组播消息', 8061, multicastAddr);
    },3000)
    console.log('listening on:'+address.address+':'+address.port)
})
server.on('error',()=>{
    console.log('服务其出错了');
})
//绑定8888端口
server.bind(4000)
  • 启动客户端服务
const dgram =require('dgram');
const client = dgram.createSocket('udp4');
// 需要和服务端设置的相同
const multicastAddr = "*******"
client.on("listening", () => {
    console.log("listening");
    //设置客户的组播地址
    client.addMembership(multicalAddress)\
})
client.on('message',(msg)=>{
    console.log('我收到了服务端发送的消息!')
    console.log('msg: ', msg.toString());
    client.send(`hello,I am client`,4000,'localhost');
})
client.on("close", () => {
    console.log("socket已经关闭");
})
client.bind(5000,"127.0.0.1")

总结


UDP协议最经典的应用应该就是微信端视频聊天了,视频聊天追求的是时效性,而TCP为了保证数据的准确性会在进行回复,重传,网络探测等等一系列的控制,这些都影响了传输的时效性,因此对于追求快速传输且对数据准确性要求不太高的应用UDP就是更好的选择。UDP在我们前端开发中其实接触的比较少,但我们可以和TCP一起了解,这两个协议许多都是相反的。一起学习的话应该更容易掌握。


相关文章
|
5月前
|
JavaScript 前端开发 API
Node.js在前端的妙用:打造更出色的Web体验
Node.js在前端的妙用:打造更出色的Web体验
267 5
|
5月前
|
前端开发
前端毕业设计|基于Vue+Nodejs实现游戏资讯平台(二)
前端毕业设计|基于Vue+Nodejs实现游戏资讯平台
|
5天前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
17 0
|
5天前
|
前端开发 JavaScript 程序员
【从前端入门到全栈】Node.js 之核心概念
【从前端入门到全栈】Node.js 之核心概念
|
5天前
|
Web App开发 JavaScript 前端开发
前端Node.js面试题
前端Node.js面试题
|
5天前
|
Web App开发 JavaScript 前端开发
对于 前端 解释下 node.js的必要性
对于 前端 解释下 node.js的必要性
7 0
|
2月前
|
JSON JavaScript 前端开发
JS的无限可能: 前端 精妙DOM技巧至Node.js的服务端
JS的无限可能: 前端 精妙DOM技巧至Node.js的服务端
|
2月前
|
JavaScript IDE 前端开发
前端开发工具配置 nodejs & git & IDE
前端开发工具配置 nodejs & git & IDE
|
2月前
|
资源调度 前端开发 JavaScript
前端 nodejs 命令行自动调用编译 inno setup 的.iss文件
前端 nodejs 命令行自动调用编译 inno setup 的.iss文件
|
3月前
|
Web App开发 存储 JavaScript
前端如何学习Node.js及Node.js的主要用途
【7月更文挑战第16天】 学习Node.js对前端开发者至关重要,涉及理解其基于V8的运行时环境、JavaScript基础、安装与验证、核心模块(如fs、http、path)及npm管理。实践项目,如用Express建服务器,参与开源,深入学习异步编程和事件循环。Node.js用于服务器开发、构建工具、本地开发服务器和实时应用,提升全栈能力。借助官方文档和各种资源加速学习。
59 4