前端需要去了解的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一起了解,这两个协议许多都是相反的。一起学习的话应该更容易掌握。


相关文章
|
1月前
|
JavaScript 前端开发 API
Node.js在前端的妙用:打造更出色的Web体验
Node.js在前端的妙用:打造更出色的Web体验
197 5
|
1月前
|
前端开发
前端毕业设计|基于Vue+Nodejs实现游戏资讯平台(二)
前端毕业设计|基于Vue+Nodejs实现游戏资讯平台
|
1月前
|
Web App开发 JavaScript 前端开发
从脚手架开始学前端 【第3期】Node.js环境搭建(CentOS 7)
从脚手架开始学前端 【第3期】Node.js环境搭建(CentOS 7)
69 0
|
1月前
|
Web App开发 JavaScript 前端开发
从脚手架开始学前端 【第2期】Node.js环境搭建(windows)
从脚手架开始学前端 【第2期】Node.js环境搭建(windows)
55 0
|
1月前
|
JavaScript 前端开发 NoSQL
构建基于Node.js的全栈应用:从前端到后端的完整指南
【5月更文挑战第24天】本文是关于使用Node.js构建全栈应用的指南,涵盖前端(React或Vue)、后端(Node.js + Express)和数据库(MongoDB)的选型与实现。文章介绍了项目结构、前端组件化开发、后端API接口编写、前后端联调及部署上线的注意事项,帮助读者掌握全栈开发流程。
|
21天前
|
Web App开发 资源调度 JavaScript
【保姆级】前端使用node.js基础教程
【6月更文挑战第3天】Node.js 是基于 Chrome V8 引擎的 JavaScript 运行环境,用于服务器端编程。常用命令包括:安装 Node.js,通过 `node -v` 查看版本;使用 npm(Node 包管理器)进行初始化、安装/卸载包、查看版本和更新;运行 `.js` 脚本;使用 `node inspect` 调试;借助 nodemon 实现自动重启;通过 `npm list` 管理包;
10 0
|
1月前
|
JSON JavaScript 前端开发
Node.js:前端开发的后端利器
Node.js作为一种运行在服务器端的JavaScript环境,为前端开发者打开了后端开发的大门。它以其高效的事件驱动、非阻塞I/O模型以及强大的npm生态,使得前端开发者能够轻松构建服务器端应用,实现前后端的全栈开发。本文将探讨Node.js的核心优势、应用场景以及在前端开发中的重要性。
|
1月前
|
JavaScript 前端开发 算法
【Node.js 版本过高】运行前端时,遇到错误 `Error: error:0308010C:digital envelope routines::unsupported`
【Node.js 版本过高】运行前端时,遇到错误 `Error: error:0308010C:digital envelope routines::unsupported`
187 0
|
1月前
|
Web App开发 JavaScript 前端开发
【Node.js】大前端技能最通俗易懂的讲解 快速入门必看
【Node.js】大前端技能最通俗易懂的讲解 快速入门必看
43 0
|
1月前
|
前端开发 JavaScript 关系型数据库
前端毕业设计|基于Vue+Nodejs实现游戏资讯平台
前端毕业设计|基于Vue+Nodejs实现游戏资讯平台