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

Node.js之如何創(chuàng)建TCP服務(wù)器端

 更新時間:2024年09月06日 09:57:00   作者:一介白衣ing  
這篇文章主要介紹了Node.js之如何創(chuàng)建TCP服務(wù)器端問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

什么是TCP

TCP全名為傳輸控制協(xié)議,在OSI七層模型(物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會話層、表示層、應(yīng)用層)中屬于傳輸層協(xié)議。

TCP是面向連接的,傳輸之前需要3次握手形成會話,之后服務(wù)器端和客戶端才能互相發(fā)送數(shù)據(jù)。

在創(chuàng)建會話過程中,服務(wù)器和客戶端分別提供一個套接字,兩個套接字共同形成一個連接。

創(chuàng)建TCP服務(wù)端

api地址:http://nodejs.cn/api/net.html

服務(wù)端的創(chuàng)建我們使用node提供的net包,客戶端我們使用telnet工具來模擬。

簡單實現(xiàn)一個TCP服務(wù)端:

const net = require("net");

const netServer = net.createServer((socket) => {
  socket.on("data", (data) => {
    socket.write("hello," + data.toString());
  });

  socket.on("end", () => {
    console.log("bye bye ~");
  });

  socket.write("歡迎來到比爾吉沃特,請輸入召喚師名稱:");
});

netServer.listen(9186, () => {
  console.log("running");
});

來做個簡單的解釋:我們調(diào)用net包的createServer方法來創(chuàng)建一個tcp服務(wù)。里面需要傳遞一個回調(diào)函數(shù)作為參數(shù),函數(shù)有一個參數(shù)為連接所需套接字。

在回調(diào)函數(shù)里面,我們綁定了data事件,它在數(shù)據(jù)傳輸?shù)臅r候會觸發(fā)。(傳輸?shù)臄?shù)據(jù)${data}為一個Buffer)

我們客戶端模擬一下:

?  test-node telnet localhost 9186
Trying ::1...
Connected to localhost.
Escape character is '^]'.
歡迎來到比爾吉沃特,請輸入召喚師名稱:zhangsan
hello,zhangsan

還有另外一種方法可以實現(xiàn),本身net.CreateServer()創(chuàng)建的服務(wù)器是一個EventEmitter實例:

const netServer = net.createServer();
netServer.on("connection", (socket) => {
  socket.on("data", (data) => {
    socket.write("welcome, " + data.toString());
  });
  socket.write("歡迎來到node.js, 請輸入你的名字:");
});

netServer.listen(9186, () => {
  console.log("running");
});

TCP服務(wù)的事件

這里簡單列一下,詳細(xì)觸發(fā)條件在文檔:http://nodejs.cn/api/net.html

服務(wù)器事件:

  • listening server.listen()時觸發(fā)
  • connection 每一個客戶端連接到套接字時觸發(fā)
  • close服務(wù)器關(guān)閉時觸發(fā)
  • error服務(wù)器異常時觸發(fā)

連接事件:

  • data一端調(diào)用write()事件傳數(shù)據(jù),另一端觸發(fā)。
  • end 連接中任意一端發(fā)送了FIN數(shù)據(jù)時觸發(fā)
  • connect 客戶端事件,套接字與服務(wù)器端連接成功觸發(fā)
  • drain 任意一端調(diào)用write()事件傳數(shù)據(jù),當(dāng)前端觸發(fā)。
  • error 異常發(fā)生時
  • close 套接字完全關(guān)閉時
  • timeout 一定時間之后連接不在活躍時觸發(fā)。

注意點

Nagle算法:

緩沖區(qū)數(shù)據(jù)達到一定數(shù)量才會將其發(fā)出,以此節(jié)約網(wǎng)絡(luò)資源。

node中默認(rèn)開啟Nagle算法,使用socket.setNoDelay(true)關(guān)閉,使數(shù)據(jù)立即發(fā)送。

關(guān)閉Nagle算法之后,一端可能收到多個小數(shù)據(jù)包的合并,所以多次write()可能另一端只觸發(fā)一次data()

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • nodejs同步調(diào)用獲取mysql數(shù)據(jù)時遇到的大坑

    nodejs同步調(diào)用獲取mysql數(shù)據(jù)時遇到的大坑

    今天小編就為大家分享一篇關(guān)于nodejs同步調(diào)用獲取mysql數(shù)據(jù)時遇到的大坑,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Node.js中sequelize時區(qū)的配置方法

    Node.js中sequelize時區(qū)的配置方法

    這篇文章主要給大家介紹了關(guān)于Node.js中sequelize時區(qū)的配置方法,文中先對時區(qū)的基礎(chǔ)概念進行了簡單介紹,然后通過示例代碼詳細(xì)介紹了sequelize時區(qū)的配置方法,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • nodejs實例解析(輸出hello world)

    nodejs實例解析(輸出hello world)

    本文主要介紹nodejs實例解析:輸出hello world的完整過程。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • 掌握Node.js中的Promise異步編程方式

    掌握Node.js中的Promise異步編程方式

    Node.js中的Promise是一種異步編程方式,可以解決回調(diào)地獄問題,提高代碼可讀性和可維護性。通過掌握Promise的使用方法,可以更好地進行異步編程,避免一些常見的錯誤和陷阱
    2023-05-05
  • nodejs使用http模塊發(fā)送get與post請求的方法示例

    nodejs使用http模塊發(fā)送get與post請求的方法示例

    這篇文章主要介紹了nodejs使用http模塊發(fā)送get與post請求的方法,結(jié)合實例形式分析了nodejs基于http模塊實現(xiàn)發(fā)送get與post請求具體操作技巧,需要的朋友可以參考下
    2018-01-01
  • Nodejs中使用captchapng模塊生成圖片驗證碼

    Nodejs中使用captchapng模塊生成圖片驗證碼

    本篇文章主要介紹了Nodejs中使用captchapng模塊實現(xiàn)圖片驗證碼,非常具有實用價值,需要的朋友可以參考下
    2017-05-05
  • Nodejs進階之服務(wù)端字符編解碼和亂碼處理

    Nodejs進階之服務(wù)端字符編解碼和亂碼處理

    這篇文章主要介紹了Nodejs進階之服務(wù)端字符編解碼和亂碼處理,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • 修改npm全局安裝模式的路徑方法

    修改npm全局安裝模式的路徑方法

    今天小編就為大家分享一篇修改npm全局安裝模式的路徑方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • mongoose中利用populate處理嵌套的方法

    mongoose中利用populate處理嵌套的方法

    這篇文章主要給大家介紹了關(guān)于mongoose中利用populate處理嵌套的方法,文中通過示例代碼介紹的非常詳細(xì),對大家具有一的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • 詳解一些適用于Node.js的命名約定

    詳解一些適用于Node.js的命名約定

    這篇文章主要介紹了詳解一些適用于Node.js的命名約定,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12

最新評論

宜兰市| 牙克石市| 松溪县| 海口市| 农安县| 准格尔旗| 庆云县| 本溪市| 合水县| 儋州市| 兴业县| 蒙城县| 九寨沟县| 河池市| 房产| 荔波县| 钟山县| 阿拉善右旗| 卓尼县| 沛县| 靖西县| 和静县| 永修县| 电白县| 瓮安县| 左贡县| 乌审旗| 巢湖市| 淮北市| 浦北县| 禹州市| 永福县| 三门峡市| 鱼台县| 寻乌县| 常宁市| 奉节县| 甘肃省| 当雄县| 宁远县| 贵港市|