最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Nodejs使用dgram模塊創(chuàng)建UDP服務詳解

 更新時間:2022年10月18日 15:54:41   作者:SaraiNoQ  
這篇文章主要為大家介紹了Nodejs使用dgram模塊創(chuàng)建UDP服務詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

之前我們介紹了使用 Nodejs 的 net 模塊基于 Socket 創(chuàng)建 TCP 協(xié)議的服務,同時利用瀏覽器與我們創(chuàng)建的服務進行了連接,今天我們看一下怎么用 Nodejs 創(chuàng)建 UDP 服務。

UDP又稱用戶數(shù)據(jù)包協(xié)議,與TCP一樣同屬于網絡傳輸層。UDP與TCP最大的不同是UDP是無連接的。TCP中連接一旦建立,所有的會話都基于連接完成,客戶端如果要與另一個TCP服務通信,需要另創(chuàng)建一個套接字socket來完成連接。

在UDP中,它提供面向事務的簡單不可靠信息傳輸服務,在網絡差的情況下存在丟包嚴重的問題。但是由于它無須連接,資源消耗低,處理快速且靈活,所以常常應用在那種偶爾丟一兩個數(shù)據(jù)包也不會產生重大影響的場景:比如音視頻、流媒體服務等。目前DNS服務、HTTP/3都是基于它實現(xiàn)的。

創(chuàng)建一個 UDP 通信

創(chuàng)建 UDP 套接字

你可以通過 dgram 模塊提供的方法來創(chuàng)建UDP套接字:

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

?? UDP套接字一旦創(chuàng)建,既可以作為客戶端發(fā)送數(shù)據(jù),也可以作為服務器端接收數(shù)據(jù)。

綁定端口

若想讓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端口上的消息。在綁定完成后,將觸發(fā)listening事件。

創(chuàng)建服務端

現(xiàn)在讓我們創(chuàng)建一個服務端來與剛才的服務進行通信:

const dgram = require("dgram");
const client = dgram.createSocket("udp4");
// 創(chuàng)建 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]) 可以將客戶端信息發(fā)送到目標地址。這些參數(shù)分別為要發(fā)送的Buffer、Buffer的偏移、Buffer的長度、目標端口、目標地址、發(fā)送完成后的回調。

與TCP套接字的write()相比,send()方法的參數(shù)列表相對復雜,但是它更靈活的地方在于可以隨意發(fā)送數(shù)據(jù)到網絡中的服務器端,而TCP如果要發(fā)送數(shù)據(jù)給另一個服務器端,則需要重新通過套接字構造新的連接。

最終運行效果:

UDP 套接字事件

UDP套接字相對TCP套接字使用起來更簡單,它只是一個 EventEmitter 的實例,而非 Stream 的實例。它具備如下自定義事件:

  • message:當UDP套接字偵聽網卡端口后,接收到消息時觸發(fā)該事件,觸發(fā)攜帶的數(shù)據(jù)為消息Buffer對象和一個遠程地址信息。
  • listening:當UDP套接字開始偵聽時觸發(fā)該事件。
  • close:調用close()方法時觸發(fā)該事件,并不再觸發(fā)message事件。
  • error:當異常發(fā)生時觸發(fā)該事件,如果不偵聽,異常將直接拋出,使進程退出。

總結

TCP與UDP都屬于互聯(lián)網中傳輸層的協(xié)議,如果要構造高效的網絡應用,就應該從傳輸層進行著手。但是對于經典的應用場景,則無須從傳輸層協(xié)議入手構造自己的應用。比如HTTP、FTP等,這些經典的應用層協(xié)議對于普通應用而言綽綽有余。Node提供了基本的 httphttps 模塊用于HTTP和HTTPS的封裝,而對于其他應用層協(xié)議的封裝,你可以在社區(qū)中找到其實現(xiàn)。

以上就是Nodejs使用dgram模塊創(chuàng)建UDP服務詳解的詳細內容,更多關于Nodejs dgram模塊創(chuàng)建UDP的資料請關注腳本之家其它相關文章!

相關文章

  • Node.js?子線程Crash?問題的排查方法

    Node.js?子線程Crash?問題的排查方法

    這篇文章主要介紹了Node.js?子線程Crash?問題的排查,本文通過代碼例子給大家詳細講解,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 使用socket.io實現(xiàn)簡單聊天室案例

    使用socket.io實現(xiàn)簡單聊天室案例

    這篇文章主要介紹了使用socket.io實現(xiàn)簡單聊天室案例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Node.js通過配置?strict-ssl=false解決npm安裝卡住問題

    Node.js通過配置?strict-ssl=false解決npm安裝卡住問題

    使用npm安裝依賴包是常見的任務之一,有時會遇到安裝卡住的問題,本文就來介紹一下通過配置?strict-ssl=false解決npm安裝卡住問題,感興趣的可以了解一下
    2024-12-12
  • json對象及數(shù)組鍵值的深度大小寫轉換問題詳解

    json對象及數(shù)組鍵值的深度大小寫轉換問題詳解

    這篇文章主要給大家介紹了關于json對象及數(shù)組鍵值的深度大小寫轉換問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-03-03
  • Nodejs全局安裝和本地安裝的不同之處

    Nodejs全局安裝和本地安裝的不同之處

    這篇文章主要介紹了Nodejs全局安裝和本地安裝的不同之處的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • node.js學習之事件模塊Events的使用示例

    node.js學習之事件模塊Events的使用示例

    Nodejs中不存在瀏覽器中冒泡,捕獲這些行為,Nodejs中實現(xiàn)了events這個模塊,Nodejs中大多數(shù)模塊都集成了這個模塊,所以events是Nodejs中最重要的一個模塊。這篇文章主要給大家介紹了關于node.js學習教程之事件模塊Events的相關資料,需要的朋友可以參考下。
    2017-09-09
  • 使用Node.js find-up在父目錄中高效尋找文件與目錄

    使用Node.js find-up在父目錄中高效尋找文件與目錄

    find-up 是一個小巧但功能強大的 Node.js 包,它能幫助我們實現(xiàn)這一需求,本文將深入探究如何使用 find-up 進行有效搜索,并結合豐富的代碼演示幫助大家快速掌握其用法,需要的朋友可以參考下
    2024-05-05
  • Node.js應用設置安全的沙箱環(huán)境

    Node.js應用設置安全的沙箱環(huán)境

    這篇文章主要介紹了Node.js應用設置安全的沙箱環(huán)境的方法以及注意事項,對此有需要的朋友可以參考學習下。
    2018-04-04
  • node.js-fs文件系統(tǒng)模塊這是你知道嗎

    node.js-fs文件系統(tǒng)模塊這是你知道嗎

    這篇文章主要為大家詳細介紹了node.js-fs文件系統(tǒng)模塊,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Node.js?搭建后端服務器內置模塊(?http+url+querystring?的使用)

    Node.js?搭建后端服務器內置模塊(?http+url+querystring?的使用)

    這篇文章主要介紹了Node.js搭建后端服務器內置模塊(http+url+querystring的使用),文章圍繞主題展開詳細的內容戒殺,具有一定的參考價值,需要的朋友可以參考一下
    2022-09-09

最新評論

左云县| 宜黄县| 灵石县| 磐石市| 万载县| 宝兴县| 临朐县| 桐乡市| 灵台县| 安宁市| 多伦县| 柳州市| 庆云县| 阜新| 驻马店市| 门头沟区| 阳新县| 成安县| 兴安县| 温泉县| 宜宾县| 馆陶县| 渑池县| 腾冲县| 南涧| 嫩江县| 邹城市| 云南省| 洛扎县| 南涧| 葵青区| 涡阳县| 彭泽县| 仪陇县| 南部县| 贵定县| 贵阳市| 札达县| 墨竹工卡县| 象州县| 通道|