欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

什么是TCP

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

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

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

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

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

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

簡(jiǎn)單實(shí)現(xiàn)一個(gè)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("歡迎來到比爾吉沃特,請(qǐng)輸入召喚師名稱:");
});

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

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

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

我們客戶端模擬一下:

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

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

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

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

TCP服務(wù)的事件

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

服務(wù)器事件:

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

連接事件:

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

注意點(diǎn)

Nagle算法:

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

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

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

總結(jié)

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

相關(guān)文章

  • Node.js調(diào)用DeepSeek?API的完整指南

    Node.js調(diào)用DeepSeek?API的完整指南

    本文將介紹如何使用?Node.js?調(diào)用?DeepSeek?API,實(shí)現(xiàn)流式對(duì)話并保存對(duì)話記錄,Node.js?版本使用現(xiàn)代異步編程方式實(shí)現(xiàn),支持流式處理和錯(cuò)誤處理,文章通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2025-02-02
  • Koa2框架快速入門與基本使用方式

    Koa2框架快速入門與基本使用方式

    這篇文章主要介紹了Koa2框架快速入門與基本使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 詳解Node.js如何開發(fā)命令行工具

    詳解Node.js如何開發(fā)命令行工具

    追求更高的效率是碼農(nóng)不斷的追求。選擇合適的工具,合理搭配使用,既能提高一部分開發(fā)效率,又能改善寫代碼時(shí)的心情。使用Node.js開發(fā)命令行工具是開發(fā)者應(yīng)該掌握的一項(xiàng)技能,適當(dāng)編寫命令行工具以提高開發(fā)效率。
    2016-08-08
  • Node.js里面的內(nèi)置模塊和自定義模塊的實(shí)現(xiàn)

    Node.js里面的內(nèi)置模塊和自定義模塊的實(shí)現(xiàn)

    這篇文章主要介紹了Node.js里面的內(nèi)置模塊和自定義模塊的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • node.js中使用ejs渲染數(shù)據(jù)的代碼實(shí)現(xiàn)

    node.js中使用ejs渲染數(shù)據(jù)的代碼實(shí)現(xiàn)

    這篇文章主要介紹了node.js中使用ejs渲染數(shù)據(jù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • 解決node終端下運(yùn)行js文件不支持ES6語(yǔ)法

    解決node終端下運(yùn)行js文件不支持ES6語(yǔ)法

    這篇文章主要介紹了解決node終端下運(yùn)行js文件不支持ES6語(yǔ)法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • nodejs教程之異步I/O

    nodejs教程之異步I/O

    nodejs的核心之一就是非阻塞的異步IO,于是想知道它是怎么實(shí)現(xiàn)的,經(jīng)過一份研究,找到些答案,在此跟大家分享下。
    2014-11-11
  • Node.js API詳解之 console模塊用法詳解

    Node.js API詳解之 console模塊用法詳解

    這篇文章主要介紹了Node.js API詳解之 console模塊用法,總結(jié)分析了Node.js API中console模塊基本函數(shù)、使用方法與操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • Nodejs?http模塊返回內(nèi)容中文亂碼問題及解決

    Nodejs?http模塊返回內(nèi)容中文亂碼問題及解決

    這篇文章主要介紹了Nodejs?http模塊返回內(nèi)容中文亂碼問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • node使用Git Bash作為命令行終端示例

    node使用Git Bash作為命令行終端示例

    這篇文章主要為大家介紹了node使用Git Bash作為命令行終端示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08

最新評(píng)論