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

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

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

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

1. 模塊引入

const net = require('net');

2. 核心類與方法

2.1 net.Server 類

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

方法

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

  • port: 端口號(若為 IPC 服務器則忽略)。
  • host: 主機地址(默認 'localhost')。
  • backlog: 最大等待連接隊列長度(默認由系統(tǒng)決定)。
  • callback: 監(jiān)聽成功后的回調(等效于監(jiān)聽 '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)聽 IPC 路徑(僅 Unix 系統(tǒng)支持)。

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

server.close([callback])
停止服務器接受新連接,關閉現有連接后觸發(fā)回調。

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

事件

'connection'
當有新客戶端連接時觸發(fā),回調參數為 socket 對象。

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

'listening'
服務器開始監(jiān)聽時觸發(fā)。

'close'
服務器關閉后觸發(fā)。

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

2.2 net.Socket 類

表示 TCP 或 IPC 的客戶端或服務器端連接。

方法

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

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

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

  • data: 要發(fā)送的數據(BufferString)。
  • encoding: 字符串編碼(默認 'utf8')。
  • callback: 數據寫入完成后的回調。

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

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

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

socket.setTimeout(timeout[, callback])
設置連接超時時間(毫秒),超時后觸發(fā)回調并自動銷毀連接。

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

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

屬性

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

事件

'data'
接收到數據時觸發(fā),回調參數為 BufferString。

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

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

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

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

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

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

2.3 工具函數

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

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

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

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

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

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 服務器

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. 關鍵注意事項

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

通過掌握這些 API,可以構建高效的 TCP 服務器和客戶端,適用于實時通信、微服務等場景。

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

相關文章

  • Nodejs實現定時爬蟲的完整實例

    Nodejs實現定時爬蟲的完整實例

    這篇文章主要給大家介紹了關于Nodejs實現定時爬蟲的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • 淺析Node.js實現HTTP文件下載

    淺析Node.js實現HTTP文件下載

    本文介紹如何用Node.js來實現HTTP文件下載,文章以實例演示所以很詳細,有需要的小伙伴們可以參考學習。
    2016-08-08
  • vscode無法運行npm命令的問題解決(cmd可行)

    vscode無法運行npm命令的問題解決(cmd可行)

    本文主要介紹了vscode無法運行npm命令的問題解決(cmd可行),VSCode無法調用npm可能是因為環(huán)境路徑配置錯誤,下面就來具體介紹一下原因及解決方法,感興趣的可以了解一下
    2024-04-04
  • nodejs中實現路由功能

    nodejs中實現路由功能

    這篇文章主要介紹了nodejs中實現路由功能,顧名思義,路由指的就是我們要針對不同的URL有不同的處理方式,本文將教你在node.js中實現路由功能,需要的朋友可以參考下
    2014-12-12
  • 一文詳解NPM如何換源

    一文詳解NPM如何換源

    在每一次的實際開發(fā)過程中我們都會下載相關的依賴包,最官方的是 npm,但是該服務器對于國內開發(fā)者來說,下載起來是比較慢的,所以我們需要換源,下面這篇文章主要給大家介紹了關于NPM如何換源的相關資料,需要的朋友可以參考下
    2023-02-02
  • NodeJs爬蟲框架Spider基礎使用教程

    NodeJs爬蟲框架Spider基礎使用教程

    這篇文章主要為大家介紹了NodeJs爬蟲框架Spider基礎使用教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • 淺談Node.js 沙箱環(huán)境

    淺談Node.js 沙箱環(huán)境

    本篇文章主要介紹了Node.js 沙箱環(huán)境 ,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Nginx 配置多站點vhost 的方法

    Nginx 配置多站點vhost 的方法

    這篇文章主要介紹了Nginx 配置多站點vhost 的方法,需要的朋友可以參考下
    2018-01-01
  • node.js對應npm安裝和使用方法教程

    node.js對應npm安裝和使用方法教程

    這篇文章主要給大家介紹了關于node.js對應npm安裝和使用方法的相關資料,文中通過代碼介紹的非常詳細,對大家學習或者使用node.js具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-01-01
  • nodejs 實現模擬form表單上傳文件

    nodejs 實現模擬form表單上傳文件

    使用nodejs來模擬form表單進行文件上傳,可以同時上傳多個文件。
    2014-07-07

最新評論