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

Node.js net模塊詳解(含類、方法、事件)

 更新時(shí)間:2025年04月15日 09:21:51   作者:Sean2077  
Node.js 的 net 模塊提供了基于 TCP 或 IPC 的網(wǎng)絡(luò)通信能力,用于創(chuàng)建服務(wù)器和客戶端,本文給大家介紹Node.js net模塊詳解包含類、方法、事件及示例,感興趣的朋友一起看看吧

Node.js 的 net 模塊提供了基于 TCP 或 IPC 的網(wǎng)絡(luò)通信能力,用于創(chuàng)建服務(wù)器和客戶端。以下是 net 模塊的核心 API 詳解,包含類、方法、事件及示例。

1. 模塊引入

const net = require('net');

2. 核心類與方法

2.1 net.Server 類

用于創(chuàng)建 TCP 或 IPC 服務(wù)器。

方法

server.listen(port[, host][, backlog][, callback])
監(jiān)聽(tīng)指定端口和主機(jī)。

  • port: 端口號(hào)(若為 IPC 服務(wù)器則忽略)。
  • host: 主機(jī)地址(默認(rèn) 'localhost')。
  • backlog: 最大等待連接隊(duì)列長(zhǎng)度(默認(rèn)由系統(tǒng)決定)。
  • callback: 監(jiān)聽(tīng)成功后的回調(diào)(等效于監(jiān)聽(tīng) 'listening' 事件)。
const server = net.createServer();
server.listen(3000, '127.0.0.1', () => {
  console.log('Server listening on port 3000');
});

server.listen(path[, callback])
監(jiān)聽(tīng) IPC 路徑(僅 Unix 系統(tǒng)支持)。

  • path: IPC 文件路徑(如 '/tmp/echo.sock')。

server.close([callback])
停止服務(wù)器接受新連接,關(guān)閉現(xiàn)有連接后觸發(fā)回調(diào)。

server.address()
返回服務(wù)器綁定的地址信息({ port, address, family }),未監(jiān)聽(tīng)時(shí)返回 null。

事件

'connection'
當(dāng)有新客戶端連接時(shí)觸發(fā),回調(diào)參數(shù)為 socket 對(duì)象。

server.on('connection', (socket) => {
  console.log('New client connected');
});

'listening'
服務(wù)器開(kāi)始監(jiān)聽(tīng)時(shí)觸發(fā)。

'close'
服務(wù)器關(guān)閉后觸發(fā)。

'error'
發(fā)生錯(cuò)誤時(shí)觸發(fā)(如端口被占用)。

2.2 net.Socket 類

表示 TCP 或 IPC 的客戶端或服務(wù)器端連接。

方法

socket.connect(port[, host][, connectListener])
連接到指定端口和主機(jī)。

  • port: 目標(biāo)端口。
  • host: 目標(biāo)主機(jī)(默認(rèn) 'localhost')。
  • connectListener: 連接成功后的回調(diào)(等效于監(jiān)聽(tīng) 'connect' 事件)。
const client = new net.Socket();
client.connect(3000, '127.0.0.1', () => {
  console.log('Connected to server');
});

socket.write(data[, encoding][, callback])
發(fā)送數(shù)據(jù)到另一端。

  • data: 要發(fā)送的數(shù)據(jù)(BufferString)。
  • encoding: 字符串編碼(默認(rèn) 'utf8')。
  • callback: 數(shù)據(jù)寫(xiě)入完成后的回調(diào)。

socket.end([data][, encoding])
半關(guān)閉連接(發(fā)送 FIN 包),可選發(fā)送最后一段數(shù)據(jù)。

socket.destroy()
強(qiáng)制銷毀連接,觸發(fā) 'close' 事件。

socket.pause() / socket.resume()
暫停/恢復(fù)接收數(shù)據(jù)(控制 'data' 事件觸發(fā))。

socket.setTimeout(timeout[, callback])
設(shè)置連接超時(shí)時(shí)間(毫秒),超時(shí)后觸發(fā)回調(diào)并自動(dòng)銷毀連接。

socket.setTimeout(3000, () => {
  console.log('Socket timed out');
  socket.destroy();
});

socket.setNoDelay([noDelay])
禁用 Nagle 算法(noDelay=true),降低延遲,適用于高頻小數(shù)據(jù)包場(chǎng)景。

屬性

  • socket.localAddress / socket.localPort: 本地地址和端口。
  • socket.remoteAddress / socket.remotePort: 遠(yuǎn)程地址和端口。
  • socket.bytesRead / socket.bytesWritten: 讀取/寫(xiě)入的字節(jié)數(shù)。

事件

'data'
接收到數(shù)據(jù)時(shí)觸發(fā),回調(diào)參數(shù)為 BufferString。

socket.on('data', (data) => {
  console.log('Received:', data.toString());
});

'connect'
連接成功建立時(shí)觸發(fā)。

'end'
另一端發(fā)送 FIN 包(結(jié)束連接)時(shí)觸發(fā)。

'close'
連接完全關(guān)閉后觸發(fā)。

'timeout'
連接超時(shí)時(shí)觸發(fā)(需配合 setTimeout 使用)。

'error'
發(fā)生錯(cuò)誤時(shí)觸發(fā)(如連接被重置)。

2.3 工具函數(shù)

net.createServer([options][, connectionListener])
快速創(chuàng)建服務(wù)器,等同于 new net.Server() + server.on('connection')。

const server = net.createServer((socket) => {
  socket.write('Welcome to the server!');
});

net.connect(port[, host][, connectListener])
創(chuàng)建客戶端并連接到服務(wù)器,返回 net.Socket 對(duì)象。

const client = net.connect(3000, 'localhost', () => {
  client.write('Hello from client!');
});

net.isIP(input)
判斷輸入是否為 IP 地址,返回 4(IPv4)、6(IPv6)或 0(無(wú)效)。

net.isIP('192.168.1.1'); // 4
net.isIP('::1');         // 6
net.isIP('hello');       // 0

net.isIPv4(input) / net.isIPv6(input)
判斷輸入是否為 IPv4 或 IPv6 地址,返回布爾值。

3. 完整示例 TCP 服務(wù)器

const net = require('net');
const server = net.createServer((socket) => {
  console.log('Client connected');
  socket.on('data', (data) => {
    console.log('Received:', data.toString());
    socket.write('Echo: ' + data);
  });
  socket.on('end', () => {
    console.log('Client disconnected');
  });
});
server.listen(3000, '127.0.0.1', () => {
  console.log('Server listening on port 3000');
});

TCP 客戶端

const net = require('net');
const client = net.connect(3000, '127.0.0.1', () => {
  client.write('Hello Server!');
});
client.on('data', (data) => {
  console.log('Server response:', data.toString());
  client.end();
});
client.on('end', () => {
  console.log('Disconnected from server');
});

4. 關(guān)鍵注意事項(xiàng)

  • 錯(cuò)誤處理:始終監(jiān)聽(tīng) 'error' 事件,避免進(jìn)程崩潰。
  • 數(shù)據(jù)流控制:使用 pause()resume() 管理大數(shù)據(jù)流。
  • 連接超時(shí):通過(guò) setTimeout 防止僵死連接。
  • IPC 路徑:Unix 系統(tǒng)下 IPC 需確保路徑可寫(xiě),Windows 不支持。

通過(guò)掌握這些 API,可以構(gòu)建高效的 TCP 服務(wù)器和客戶端,適用于實(shí)時(shí)通信、微服務(wù)等場(chǎng)景。

到此這篇關(guān)于Node.js net模塊詳解的文章就介紹到這了,更多相關(guān)Node.js net模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于豆瓣API+Angular開(kāi)發(fā)的web App

    基于豆瓣API+Angular開(kāi)發(fā)的web App

    這篇文章主要介紹了基于豆瓣API+Angular開(kāi)發(fā)的web App的方法和示例代碼,效果非常棒,有需要的小伙伴參考下
    2015-01-01
  • nodejs環(huán)境使用Typeorm連接查詢Oracle數(shù)據(jù)

    nodejs環(huán)境使用Typeorm連接查詢Oracle數(shù)據(jù)

    這篇文章主要介紹了nodejs環(huán)境使用Typeorm連接查詢Oracle數(shù)據(jù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 用nodejs實(shí)現(xiàn)json和jsonp服務(wù)的方法

    用nodejs實(shí)現(xiàn)json和jsonp服務(wù)的方法

    本篇文章主要介紹了用nodejs實(shí)現(xiàn)json和jsonp服務(wù)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • Node.js基礎(chǔ)入門(mén)之path模塊,url模塊,http模塊使用詳解

    Node.js基礎(chǔ)入門(mén)之path模塊,url模塊,http模塊使用詳解

    這篇文章主要為大家介紹了Node.js中的三個(gè)模塊(path、url、http)的使用詳解,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-03-03
  • nodejs關(guān)于中間件解析

    nodejs關(guān)于中間件解析

    這篇文章主要介紹了nodejs關(guān)于中間件解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • node.js中的buffer.slice方法使用說(shuō)明

    node.js中的buffer.slice方法使用說(shuō)明

    這篇文章主要介紹了node.js中的buffer.slice方法使用說(shuō)明,本文介紹了buffer.slice的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • Nodejs爬蟲(chóng)進(jìn)階教程之異步并發(fā)控制

    Nodejs爬蟲(chóng)進(jìn)階教程之異步并發(fā)控制

    這篇文章主要介紹了Nodejs爬蟲(chóng)進(jìn)階教程之異步并發(fā)控制的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • koa源碼中promise的解讀

    koa源碼中promise的解讀

    這篇文章主要介紹了koa源碼中promise的解讀,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • node.js實(shí)現(xiàn)博客小爬蟲(chóng)的實(shí)例代碼

    node.js實(shí)現(xiàn)博客小爬蟲(chóng)的實(shí)例代碼

    這篇文章通過(guò)實(shí)例代碼來(lái)給大家介紹如何利用node.js實(shí)現(xiàn)博客小爬蟲(chóng),有需要的朋友們可以直接運(yùn)用文中給出的實(shí)例代碼來(lái)進(jìn)行實(shí)踐學(xué)習(xí),感興趣的朋友們下面來(lái)一起看看吧。
    2016-10-10
  • NodeJS后端開(kāi)發(fā)操作文件之讀寫(xiě)文件

    NodeJS后端開(kāi)發(fā)操作文件之讀寫(xiě)文件

    這篇文章主要介紹了NodeJS后端開(kāi)發(fā)操作文件之讀寫(xiě)文件,操作文件是服務(wù)端一個(gè)基礎(chǔ)的功能,也是做后端開(kāi)發(fā)的必備能力之一,操作文件主要包括讀和寫(xiě)。而這些功能NodeJS都已經(jīng)提供了對(duì)應(yīng)的方法
    2022-06-06

最新評(píng)論

确山县| 科技| 谷城县| 磐安县| 台江县| 洪湖市| 房山区| 新晃| 五常市| 汝南县| 上杭县| 淅川县| 来宾市| 大新县| 金沙县| 双柏县| 庆城县| 沁源县| 信宜市| 防城港市| 青岛市| 定陶县| 福州市| 铁力市| 南汇区| 长春市| 大英县| 武安市| 临泉县| 阳曲县| 德格县| 社会| 韩城市| 内江市| 车致| 海阳市| 彭山县| 扎囊县| 道真| 钦州市| 富锦市|