• Node.js Video Tutorials

Node.js - Net 模組



Node.js net 模組用於建立伺服器和客戶端。此模組提供非同步網路包裝器,可以使用以下語法匯入。

var net = require("net")

方法

序號 方法及描述
1

net.createServer([options][, connectionListener])

建立一個新的 TCP 伺服器。connectionListener 引數自動設定為 'connection' 事件的監聽器。

2

net.connect(options[, connectionListener])

工廠方法,返回一個新的 'net.Socket' 並連線到指定的地址和埠。

3

net.createConnection(options[, connectionListener])

工廠方法,返回一個新的 'net.Socket' 並連線到指定的地址和埠。

4

net.connect(port[, host][, connectListener])

建立到主機上埠的 TCP 連線。如果省略主機,則假定為 'localhost'。connectListener 引數將被新增為 'connect' 事件的監聽器。這是一個工廠方法,它返回一個新的 'net.Socket'。

5

net.createConnection(port[, host][, connectListener])

建立到主機上埠的 TCP 連線。如果省略主機,則假定為 'localhost'。connectListener 引數將被新增為 'connect' 事件的監聽器。這是一個工廠方法,它返回一個新的 'net.Socket'。

6

net.connect(path[, connectListener])

建立到 path 的 Unix 套接字連線。connectListener 引數將被新增為 'connect' 事件的監聽器。這是一個工廠方法,它返回一個新的 'net.Socket'。

7

net.createConnection(path[, connectListener])

建立到 path 的 Unix 套接字連線。connectListener 引數將被新增為 'connect' 事件的監聽器。這是一個工廠方法,它返回一個新的 'net.Socket'。

8

net.isIP(input)

測試輸入是否為 IP 地址。對於無效字串返回 0,對於 IPv4 地址返回 4,對於 IPv6 地址返回 6。

9

net.isIPv4(input)

如果輸入是 IPv4 地址,則返回 true,否則返回 false。

10

net.isIPv6(input)

如果輸入是 IPv6 地址,則返回 true,否則返回 false。

類 - net.Server

此類用於建立 TCP 或本地伺服器。

方法

序號 方法及描述
1

server.listen(port[, host][, backlog][, callback])

在指定的埠和主機上開始接受連線。如果省略主機,伺服器將接受定向到任何 IPv4 地址 (INADDR_ANY) 的連線。埠值為零將分配一個隨機埠。

2

server.listen(path[, callback])

啟動一個本地套接字伺服器,監聽給定路徑上的連線。

3

server.listen(handle[, callback])

handle 物件可以設定為伺服器或套接字(任何具有底層 _handle 成員的物件),或者一個 {fd: <n>} 物件。它將使伺服器在指定的控制代碼上接受連線,但假定檔案描述符或控制代碼已繫結到埠或域套接字。在 Windows 上不支援監聽檔案描述符。

4

server.listen(options[, callback])

options 的 port、host 和 backlog 屬性以及可選的回撥函式的行為與呼叫 server.listen(port, [host], [backlog], [callback]) 時相同。或者,可以使用 path 選項來指定 UNIX 套接字。

5

server.close([callback])

當所有連線結束且伺服器發出 'close' 事件時最終關閉。

6

server.address()

返回由作業系統報告的伺服器的繫結地址、地址族名稱和埠。

7

server.unref()

在伺服器上呼叫 unref 將允許程式退出,如果這是事件系統中唯一活動的伺服器。如果伺服器已經 unrefd,則再次呼叫 unref 將沒有任何效果。

8

server.ref()

unref 的反義詞,在先前未引用的伺服器上呼叫 ref 將不允許程式退出,如果它是剩下的唯一伺服器(預設行為)。如果伺服器已引用,則再次呼叫 ref 將沒有任何效果。

9

server.getConnections(callback)

非同步獲取伺服器上的併發連線數。當套接字傳送到 forks 時有效。回撥應接受兩個引數 err 和 count。

事件

序號 事件及描述
1

listening

在呼叫 server.listen 後繫結伺服器時發出。

2

connection

建立新連線時發出。套接字物件,連線物件可用於事件處理程式。Socket 是 net.Socket 的例項。

3

close

伺服器關閉時發出。請注意,如果存在連線,則此事件直到所有連線結束才會發出。

4

error

發生錯誤時發出。'close' 事件將在此事件之後直接呼叫。

類 - net.Socket

此物件是 TCP 或本地套接字的抽象。net.Socket 例項實現雙工流介面。它們可以由使用者建立並用作客戶端(使用 connect()),或者可以由 Node 建立並透過伺服器的 'connection' 事件傳遞給使用者。

事件

net.Socket 是一個 eventEmitter,它發出以下事件。

序號 事件及描述
1

lookup

解析主機名後但在連線之前發出。不適用於 UNIX 套接字。

2

connect

成功建立套接字連線時發出。

3

data

收到資料時發出。引數 data 將是 Buffer 或 String。資料的編碼由 socket.setEncoding() 設定。

4

end

套接字的另一端傳送 FIN 資料包時發出。

5

timeout

如果套接字因空閒而超時,則發出。這只是為了通知套接字處於空閒狀態。使用者必須手動關閉連線。

6

drain

寫入緩衝區變空時發出。可用於限制上傳。

7

error

發生錯誤時發出。'close' 事件將在此事件之後直接呼叫。

8

close

套接字完全關閉後發出一次。引數 had_error 是一個布林值,指示套接字是否因傳輸錯誤而關閉。

屬性

net.Socket 提供許多有用的屬性,以便更好地控制套接字互動。

序號 屬性及描述
1

socket.bufferSize

此屬性顯示當前緩衝要寫入的字元數。

2

socket.remoteAddress

遠端 IP 地址的字串表示形式。例如,'74.125.127.100' 或 '2001:4860:a005::68'。

3

socket.remoteFamily

遠端 IP 族系的字串表示形式。'IPv4' 或 'IPv6'。

4

socket.remotePort

遠端埠的數字表示形式。例如,80 或 21。

5

socket.localAddress

遠端客戶端連線的本地 IP 地址的字串表示形式。例如,如果您正在監聽 '0.0.0.0' 並且客戶端連線到 '192.168.1.1',則值為 '192.168.1.1'。

6

socket.localPort

本地埠的數字表示形式。例如,80 或 21。

7

socket.bytesRead

接收到的位元組數。

8

socket.bytesWritten

傳送的位元組數。

方法

序號 方法及描述
1

new net.Socket([options])

構造一個新的套接字物件。

2

socket.connect(port[, host][, connectListener])

為給定套接字開啟連線。如果給出了 port 和 host,則套接字將作為 TCP 套接字開啟,如果省略 host,則假定為 localhost。如果給出了 path,則套接字將作為 Unix 套接字開啟到該路徑。

3

socket.connect(path[, connectListener])

為給定套接字開啟連線。如果給出了 port 和 host,則套接字將作為 TCP 套接字開啟,如果省略 host,則假定為 localhost。如果給出了 path,則套接字將作為 Unix 套接字開啟到該路徑。

4

socket.setEncoding([encoding])

將套接字的編碼設定為可讀流。

5

socket.write(data[, encoding][, callback])

在套接字上傳送資料。對於字串,第二個引數指定編碼——預設為 UTF8 編碼。

6

socket.end([data][, encoding])

半關閉套接字,即傳送 FIN 資料包。伺服器仍然可能會發送一些資料。

7

socket.destroy()

確保此套接字上不再發生 I/O 活動。僅在發生錯誤(解析錯誤等)時才需要。

8

socket.pause()

暫停讀取資料。也就是說,不會發出 'data' 事件。用於限制上傳。

9

socket.resume()

在呼叫 pause() 後恢復讀取。

10

socket.setTimeout(timeout[, callback])

將套接字設定為在套接字上空閒 timeout 毫秒後超時。預設情況下,net.Socket 沒有超時。

11

socket.setNoDelay([noDelay])

停用 Nagle 演算法。預設情況下,TCP 連線使用 Nagle 演算法,它們在傳送資料之前緩衝資料。為 noDelay 設定 true 將在每次呼叫 socket.write() 時立即傳送資料。noDelay 預設值為 true。

12

socket.setKeepAlive([enable][, initialDelay])

啟用/停用保持活動功能,並可選地設定在空閒套接字上傳送第一個保持活動探測之前的初始延遲。enable 預設值為 false。

13

socket.address()

返回由作業系統報告的套接字的繫結地址、地址族名稱和埠。返回一個具有三個屬性的物件,例如 { port: 12346, family: 'IPv4', address: '127.0.0.1' }。

14

socket.unref()

在套接字上呼叫 unref 將允許程式退出,如果這是事件系統中唯一活動的套接字。如果套接字已經 unrefd,則再次呼叫 unref 將沒有任何效果。

15

socket.ref()

unref 的反義詞,在先前未引用的套接字上呼叫 ref 將不允許程式退出,如果它是剩下的唯一套接字(預設行為)。如果套接字已引用,則再次呼叫 ref 將沒有任何效果。

示例

建立一個名為 server.js 的 js 檔案,其中包含以下程式碼:

檔案:server.js

var net = require('net');
var server = net.createServer(function(connection) { 
   console.log('client connected');
   
   connection.on('end', function() {
      console.log('client disconnected');
   });
   
   connection.write('Hello World!\r\n');
   connection.pipe(connection);
});

server.listen(8080, function() { 
   console.log('server is listening');
});

現在執行 server.js 檢視結果:

$ node server.js

驗證輸出。

server is listening

建立一個名為 client.js 的 js 檔案,其中包含以下程式碼:

檔案:client.js

var net = require('net');
var client = net.connect({port: 8080}, function() {
   console.log('connected to server!');  
});

client.on('data', function(data) {
   console.log(data.toString());
   client.end();
});

client.on('end', function() { 
   console.log('disconnected from server');
});

現在從另一個終端執行 client.js 檢視結果:

$ node client.js

驗證輸出。

connected to server!
Hello World!

disconnected from server

驗證在執行 server.js 的終端上的輸出。

server is listening
client connected
client disconnected
nodejs_utitlity_module.htm
廣告
© . All rights reserved.