OurJS


OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;

欢迎您订阅我们的技术周刊


我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,

欢迎分享您的观点,经验,技巧,心得

让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;


本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com

TCP/UDP协议比较:在Node.JS中UDP服务器和客户端通信示例


分享到
分类 大话编程   关键字 分享   发布 ourjs  1490866224534
注意 转载须保留原文链接,译文链接,作者译者等信息。  

UDP/TCP比较


用户数据报协议(User Datagram Protocol,UDP)和TCP协议一样,都在传输层,位于IP协议之上。TCP是一个面向连接的协议,它在网络节点之间提供可靠有序的数据流。与TCP不同,UDP允许你向其它主机发送消息(数据报),而不需要提前建立连接。由于UDP的无状态性,不用像TCP那样面向连接,所以UDP相对轻量,这对于服务器响应来向大量客户端的查询非常有用。与TCP相比,UDP的另一个优势是支持消息的广播和多多播。在Node.js中,dgram模块用来支持和实现UDP用户数据报协议。 

 
 
TCP
UDP
是否连接
面向连接
面向非连接
传输可靠性
可靠的
不可靠的
应用场合
传输大量的数据
少量数据
速度


当数据传输的性能必须让位于数据传输的完整性、可控制性和可靠性时,TCP协议是当然的选择。当强调传输性能而不是传输的完整性时,如:音频和多媒体应用,UDP是最好的选择。在数据传输时间很短,以至于此前的连接过程成为整个流量主体的情况下,UDP也是一个好的选择,如:DNS交换。把SNMP建立在UDP上的部分原因是设计者认为当发生网络阻塞时,UDP较低的开销使其有更好的机会去传送管理数据。TCP丰富的功能有时会导致不可预料的性能低下。


构建UDP服务器 


构建一个UDP Socket套接字对象使用dgram.createSocket()方法,这个方法返回的Socket套接字对象,可以监听一个网络端口,从而启动一个UDP服务器,

var dgram   = require('dgram')
var server  = dgram.createSocket('udp4')

server.on('error', function (err) {
  console.log(`server error:\n${err.stack}`);
  server.close();
});

server.on('message', function (msg, rinfo) {
  console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);

  //通知客户端我已经收到
  server.send('received: ' + msg.toString(), rinfo.port, rinfo.address)
});

server.on('listening', function () {
  var address = server.address();
  console.log(`server listening ${address.address}:${address.port}`);
});

server.bind(4064);

 在上面的示例代码中,创建一个UDP的服务端,这个服务端会监听 4064 端口。 当接到到消息时发送成功给客户端。

构建UDP客户端 



var dgram   = require('dgram')
var server  = dgram.createSocket('udp4')
var client  = dgram.createSocket('udp4')


var model = { username: 'ourjs' }

client.send(Buffer.from(JSON.stringify(model)), 4064, 'localhost', function (err) {
    console.log(err)
})

client.on('message', function(msg) {
  console.log('message:', msg.toString())
})

上面的客户端代码会将数据发送到UDP服务器,收到服务器的回复后会在控制台打印收到的数据。 


补充:UDP广播消息

有些时侯,我们可能并不知道局域网内服务器IP地址,此时可以向 255.255.255.255 全网段发送一条广播消息,服务器接收到以后立即将消息返回,客户端自然就知道服务器IP了,广播的发送与客户端普通消息非常类似:

var dgram = require("dgram");
var client = dgram.createSocket("udp4");
client.bind(function () {
  client.setBroadcast(true);
});

var model = { username: 'broadcast' }

client.send(Buffer.from(JSON.stringify(model)), 4064, '255.255.255.255', function (err) {
    console.log(err)
})

client.on('message', function(msg, ipdr) {
  console.log('message:', msg.toString())
  console.log('address:', ipdr) //服务器 IP 地址
})

执行结果:

$ node udp.broadcast.js
null
message: received: {"username":"broadcast"}
address: { address: '10.10.10.162', family: 'IPv4', port: 4064, size: 34 }

社区评论 ( Beta版 )
OnceDoc 您自己的企业内容管理系统——文档、流程、知识库、报表、网盘All In One

访问404页面,寻找丢失儿童
 热门文章 - 分享最多
  1. Github Pages疑似被封: 再也不能用Pages搭建个人博客了
  2. JavaScript条形码生成和扫码识别(Barcode scan)开源库
  3. 关于华为优化30、40老员工的争议
  4. OnceVI前后端分离的数据可视化报表工具简介
  5. 2016 年崛起的 JS 项目
  6. 如何基于SVG矢量图制作一个可填写信息的可视化表单-OnceVI
  7. OnceVI报表制作入门—如何将用户的json数据可视化成名片展示
  8. 学哪种语言的最赚钱?调查显示JavaScript和SQL是程序员最常用的语言
  9. 可视化Web报表OnceVI中用户输入表单验证与提交
  10. 搜狐社区宣布关闭,又有多少人的回忆被埋葬在PC时代里?
  11. AirJD-简单好用的免费建站工具

 相关阅读 - 大话编程
  1. 周鸿祎:一些程序员没有商业意识,却又很自负,一看就知道不会创业
  2. 微信抢红包插件示例代码及其实现原理
  3. 学哪种语言的最赚钱?调查显示JavaScript和SQL是程序员最常用的语言
  4. 搜狐社区宣布关闭,又有多少人的回忆被埋葬在PC时代里?
  5. 第三方评论平台多说即将关闭
  6. 如何搭建个人SASS云盘:30秒快速安装OnceDoc企业私有网盘
  7. 2016年前端技术观察
  8. 在Debian上安装Nginx并搭建一个最简单的静态网站服务器(以OnceAI为例)
  9. OnceIO(Node.JS)的静态文件路由(app.static)
  10. 乌云和漏洞盒子停业整顿—可能与国内“白帽子”黑客圈高度关注的“袁炜事件”有关

 关键字 - 分享
  1. IntelliJ IDEA使用技巧(一)——常用快捷键
  2. 【使用指南】MyEclipse部署配置(多图)
  3. 条码识别控件Dynamsoft Barcode Reader更新至v5.2丨附下载
  4. 一位自由职业者的分享:程序员怎样找兼职?
  5. 【附下载】按需点播的MyEclipse示例
  6. MyEclipse WebSphere开发教程:安装和更新WebSphere 6.1, JAX-WS, EJB 3.0(一)
  7. Kendo UI常用示例汇总(二十)
  8. WordPress、百度宣布停止使用React(Native)开源项目,Facebook开源专利许可潜在的法律风险
  9. 案例实战:LightningChart集成Dynamotive汽车遥测软件|见证真正无与伦比的性能
  10. 快速制作演示动画的工具TurboDemo常见问题合集(三)

 欢迎订阅 - 技术周刊

我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;


 关注我们

我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊

ourjs官方微信号