中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

nodejs中怎么構建一個UDP服務

發布時間:2021-06-22 15:09:26 來源:億速云 閱讀:402 作者:Leah 欄目:大數據

本篇文章為大家展示了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服務,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

诸暨市| 和田市| 温泉县| 孟连| 凤冈县| 平武县| 大田县| 承德市| 博爱县| 黔东| 咸宁市| 泾川县| 桦川县| 邵阳县| 华池县| 开鲁县| 兴安盟| 淄博市| 扶沟县| 新野县| 南溪县| 甘洛县| 贵州省| 湄潭县| 平安县| 理塘县| 吴川市| 张家界市| 淮滨县| 拜泉县| 右玉县| 霍林郭勒市| 班戈县| 湖州市| 沁源县| 萨嘎县| 凤凰县| 信丰县| 华亭县| 闵行区| 新龙县|