nodejs中net模塊有什么用-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)nodejs中net模塊有什么用,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

創(chuàng)新互聯(lián)建站制作網(wǎng)站網(wǎng)頁(yè)找三站合一網(wǎng)站制作公司,專注于網(wǎng)頁(yè)設(shè)計(jì),成都網(wǎng)站建設(shè)、成都做網(wǎng)站,網(wǎng)站設(shè)計(jì),企業(yè)網(wǎng)站搭建,網(wǎng)站開(kāi)發(fā),建網(wǎng)站業(yè)務(wù),680元做網(wǎng)站,已為上千余家服務(wù),創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)將一如既往的為我們的客戶提供最優(yōu)質(zhì)的網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷推廣服務(wù)!

TCP服務(wù)在網(wǎng)絡(luò)應(yīng)用中十分常見(jiàn),目前大多數(shù)的應(yīng)用都是基于TCP搭建而成的。net模塊提供了一個(gè)異步網(wǎng)絡(luò)包裝器,用于TCP網(wǎng)絡(luò)編程,它包含了創(chuàng)建服務(wù)器和客戶端的方法。本文將詳細(xì)介紹nodeJS中的net模塊。

IP測(cè)試

【net.isIP(input)】

測(cè)試是否輸入的為 IP 地址。字符串無(wú)效時(shí)返回 0。 IPV4 情況下返回 4, IPV6情況下返回 6

var net = require('net');
console.log(net.isIP('1.1.1.1'));//4
console.log(net.isIP('1.1'));//0
console.log(net.isIP('AD80::ABAA:0000:00C2:0002'));//6

【net.isIPv4(input)】

如果輸入的地址為 IPV4, 返回 true,否則返回 false

var net = require('net');
console.log(net.isIPv4('1.1.1.1'));//true
console.log(net.isIPv4('1.1'));//false

【net.isIPv6(input)】

如果輸入的地址為 IPV6, 返回 true,否則返回 false

var net = require('net');
console.log(net.isIPv6('1.1.1.1'));//true
console.log(net.isIPv6('AD80::ABAA:0000:00C2:0002'));//true

服務(wù)器

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

創(chuàng)建一個(gè) TCP 服務(wù)器,參數(shù)如下

options
    allowHalfOpen: false(默認(rèn)),如果為true,當(dāng)另一端socket發(fā)送FIN包時(shí)socket不會(huì)自動(dòng)發(fā)送FIN包。socket變?yōu)椴豢勺x但可寫(xiě)(半關(guān)閉)
    pauseOnConnect: false(默認(rèn)),如果為true,當(dāng)連接到來(lái)的時(shí)候相關(guān)聯(lián)的socket將會(huì)暫停。它允許在初始進(jìn)程不讀取數(shù)據(jù)情況下,讓連接在進(jìn)程間傳遞。調(diào)用resume()從暫停的socket里讀取數(shù)據(jù)
connectionListener 自動(dòng)給 'connection' 事件創(chuàng)建監(jiān)聽(tīng)器
var server = net.createServer(function() {

});

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

開(kāi)始接受指定端口port和主機(jī)host的連接。如果忽略主機(jī)host,服務(wù)器將會(huì)接受任何IPv4地址(INADDR_ANY)的直接連接。端口為0,則會(huì)分配一個(gè)隨機(jī)端口

積壓量(Backlog)為連接等待隊(duì)列的較大長(zhǎng)度。實(shí)際長(zhǎng)度由操作系統(tǒng)通過(guò)sysctl設(shè)定,比如linux上的tcp_max_syn_backlog和somaxconn。這個(gè)參數(shù)默認(rèn)值是511

當(dāng)服務(wù)器被綁定時(shí)會(huì)觸發(fā)'listening'事件。最后一個(gè)參數(shù)callback將會(huì)作為'listening'事件的監(jiān)聽(tīng)器

有些用戶會(huì)遇到EADDRINUSE錯(cuò)誤,它表示另外一個(gè)服務(wù)器已經(jīng)運(yùn)行在所請(qǐng)求的端口上。處理這個(gè)情況的辦法是等一段時(shí)間后再重試

server.listen(6000);

【server.close([callback])】

服務(wù)器停止接收新的連接,保持現(xiàn)有連接。當(dāng)所有連接結(jié)束的時(shí)候服務(wù)器會(huì)關(guān)閉,并會(huì)觸發(fā)'close'事件。你可以傳一個(gè)回調(diào)函數(shù)來(lái)監(jiān)聽(tīng)'close'事件。如果存在,將會(huì)調(diào)用回調(diào)函數(shù),錯(cuò)誤(如果有)作為參數(shù)

【server.address()】

操作系統(tǒng)返回綁定的地址、協(xié)議族名和服務(wù)器端口。查找哪個(gè)端口已經(jīng)被系統(tǒng)綁定時(shí),非常有用

[注意]在 'listening' 事件觸發(fā)前,不要調(diào)用 server.address()

server.listen(function() {
    //{ address: '::', family: 'IPv6', port: 53806 }
    console.log(server.address());
});

【server.maxConnections】

設(shè)置這個(gè)選項(xiàng)后,當(dāng)服務(wù)器連接數(shù)超過(guò)數(shù)量時(shí)拒絕新連接

一旦已經(jīng)用 child_process.fork() 方法將 socket 發(fā)送給子進(jìn)程, 就不推薦使用這個(gè)選項(xiàng)

【server.getConnections(callback)】

異步獲取服務(wù)器當(dāng)前活躍連接的數(shù)量。當(dāng) socket 發(fā)送給子進(jìn)程后才有效;

回調(diào)函數(shù)有 2 個(gè)參數(shù) err 和 count

server.getConnections(function(err,count){
    console.log(count);//0
})

【事件listening】

當(dāng)服務(wù)器調(diào)用 server.listen 綁定后會(huì)觸發(fā)

【事件connection】

{Socket object} 連接對(duì)象

當(dāng)新連接創(chuàng)建后會(huì)被觸發(fā)。socket 是 net.Socket實(shí)例

【事件close】

服務(wù)器關(guān)閉時(shí)會(huì)觸發(fā)

[注意]如果存在連接,這個(gè)事件不會(huì)被觸發(fā)直到所有的連接關(guān)閉

【事件error】

發(fā)生錯(cuò)誤時(shí)觸發(fā)

客戶端

【net.connect(options[, connectionListener])】

【net.createConnection(options[, connectionListener])】

connect()的別名是createConnection()方法

該方法返回一個(gè)新的 'net.Socket',并連接到指定的地址和端口。當(dāng) socket 建立的時(shí)候,將會(huì)觸發(fā) 'connect' 事件。和'net.Socket'有相同的方法

對(duì)于 TCP sockets,參數(shù)options如下

port: 客戶端連接到 Port 的端口(必須)
host: 客戶端要連接到得主機(jī)。默認(rèn) 'localhost'
localAddress: 網(wǎng)絡(luò)連接綁定的本地接口
localPort: 網(wǎng)絡(luò)連接綁定的本地端口
family : IP 棧版本。默認(rèn) 4

對(duì)于本地域socket,參數(shù)options如下

path: 客戶端連接到得路徑(必須)
var client = net.connect({port: 5000}, function() {});

Socket

【new net.Socket([options])】

構(gòu)造一個(gè)新的 socket 對(duì)象

options 對(duì)象有以下默認(rèn)值:

{ fd: null
  allowHalfOpen: false,
  readable: false,
  writable: false
}

參數(shù)fd允許指定一個(gè)存在的文件描述符。將readable和(或)writable設(shè)為true,允許在這個(gè)socket上讀或?qū)?僅在參數(shù)fd有效時(shí))

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

【socket.connect(path[, connectListener])】

使用傳入的socket打開(kāi)一個(gè)連接。如果指定了端口port和主機(jī)host,TCP socket將打開(kāi)socket。如果忽略參數(shù)host,則默認(rèn)為localhost。如果指定了path,socket將會(huì)被指定路徑的unix socket 打開(kāi)

參數(shù) connectListener 將會(huì)作為監(jiān)聽(tīng)器添加到 'connect' 事件

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

在socket上發(fā)送數(shù)據(jù)。第二個(gè)參數(shù)指定了字符串的編碼,默認(rèn)是UTF8編碼

如果所有數(shù)據(jù)成功刷新到內(nèi)核緩沖區(qū),返回true。如果數(shù)據(jù)全部或部分在用戶內(nèi)存里,返回false。當(dāng)緩沖區(qū)為空的時(shí)候會(huì)觸發(fā)'drain'

當(dāng)數(shù)據(jù)最終被完整寫(xiě)入的的時(shí)候,可選的callback參數(shù)會(huì)被執(zhí)行,但不一定會(huì)馬上執(zhí)行

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

半關(guān)閉socket。例如,它發(fā)送一個(gè)FIN包??赡芊?wù)器仍在發(fā)送數(shù)據(jù)。

如果參數(shù)data不為空,等同于調(diào)用socket.write(data,encoding)后再調(diào)用socket.end()

【socket.destroy()】

確保沒(méi)有 I/O 活動(dòng)在這個(gè)套接字上。只有在錯(cuò)誤發(fā)生情況下才需要

【socket.pause()】

暫停讀取數(shù)據(jù)。就是說(shuō),不會(huì)再觸發(fā) data 事件。對(duì)于控制上傳非常有用

【socket.resume()】

調(diào)用 pause() 后想恢復(fù)讀取數(shù)據(jù)

【socket.setTimeout(timeout[, callback])】

socket 閑置時(shí)間超過(guò) timeout 毫秒后 ,將 socket 設(shè)置為超時(shí)。觸發(fā)空閑超時(shí)事件時(shí),socket 將會(huì)收到 'timeout'事件,但是連接不會(huì)被斷開(kāi)。用戶必須手動(dòng)調(diào)用 end() 或 destroy() 這個(gè)socket。

如果 timeout = 0, 那么現(xiàn)有的閑置超時(shí)會(huì)被禁用??蛇x的 callback 參數(shù)將會(huì)被添加成為 'timeout' 事件的一次性監(jiān)聽(tīng)器

【socket.setNoDelay([noDelay])】

禁用納格(Nagle)算法。默認(rèn)情況下 TCP 連接使用納格算法,在發(fā)送前他們會(huì)緩沖數(shù)據(jù)。將 noDelay 設(shè)置為 true 將會(huì)在調(diào)用 socket.write() 時(shí)立即發(fā)送數(shù)據(jù)。noDelay 默認(rèn)值為 true

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

禁用/啟用長(zhǎng)連接功能,在發(fā)送第一個(gè)在閑置socket上的長(zhǎng)連接probe之前,可選地設(shè)定初始延時(shí)。默認(rèn)false

設(shè)定initialDelay(毫秒),來(lái)設(shè)定收到的最后一個(gè)數(shù)據(jù)包和第一個(gè)長(zhǎng)連接probe之間的延時(shí)。將 initialDelay 設(shè)為0,將會(huì)保留默認(rèn)(或者之前)的值。默認(rèn)值為0

【socket.address()】

操作系統(tǒng)返回綁定的地址,協(xié)議族名和服務(wù)器端口。返回的對(duì)象有 3 個(gè)屬性,比如{ port: 12346, family: 'IPv4', address: '127.0.0.1' }

【socket.remoteAddress】

遠(yuǎn)程的 IP 地址字符串

【socket.remoteFamily】

遠(yuǎn)程IP協(xié)議族字符串

【socket.remotePort】

遠(yuǎn)程端口,數(shù)字表示

【socket.localAddress】

遠(yuǎn)程客戶端正在連接的本地IP地址,字符串表示

【socket.localPort】

本地端口地址,數(shù)字表示

【socket.bytesRead】

接收的字節(jié)數(shù)

【socket.bytesWritten】

發(fā)送的字節(jié)數(shù)

【事件lookup】

在解析域名后,但在連接前,觸發(fā)這個(gè)事件。對(duì) UNIX sokcet 不適用

err {Error | Null} 錯(cuò)誤對(duì)象
address {String} IP 地址。
family {String | Null} 地址類型

【事件connect】

當(dāng)成功建立 socket 連接時(shí)觸發(fā)、

【事件data】

{Buffer object}

當(dāng)接收到數(shù)據(jù)時(shí)觸發(fā)。參數(shù) data 可以是 Buffer 或 String

當(dāng) Socket 觸發(fā)一個(gè) 'data' 事件時(shí),如果沒(méi)有監(jiān)聽(tīng)器,數(shù)據(jù)將會(huì)丟失

【事件end】

當(dāng) socket 另一端發(fā)送 FIN 包時(shí),觸發(fā)該事件

【事件timeout】

當(dāng) socket 空閑超時(shí)時(shí)觸發(fā),僅是表明 socket 已經(jīng)空閑。用戶必須手動(dòng)關(guān)閉連接

【事件drain】

當(dāng)寫(xiě)緩存為空得時(shí)候觸發(fā)??捎脕?lái)控制上傳

【事件error】

錯(cuò)誤發(fā)生時(shí)觸發(fā)

【事件close】

had_error {Boolean} 如果 socket 傳輸錯(cuò)誤,為 true

當(dāng) socket 完全關(guān)閉時(shí)觸發(fā)。參數(shù) had_error 是 boolean,它表示是否因?yàn)閭鬏斿e(cuò)誤導(dǎo)致 socket 關(guān)閉

簡(jiǎn)易服務(wù)器

【服務(wù)器】

//server.js
var net = require('net') ;
var server = net.createServer(function(socket) { 
    socket.write("Hi!\n");
    socket.on("data", function(data) {
      console.log(data.toString());
    });
    socket.on("end", function() {
      console.log('有客戶機(jī)下線了?。?!');
    });
    socket.on('error', function() {
      console.log('發(fā)生意外錯(cuò)誤?。。?#39;);
    });
}) ;
server.listen(8080) ;

【客戶機(jī)】

//client.js
var net = require('net') ;
var client = net.connect({port: 8080},function(){
    client.name = '客戶機(jī)1';
    client.write(client.name + ' 上線了!\n');
    client.end(client.name + ' 下線了!\n');
    client.on("data", function(data) {
        console.log(data.toString());
    });
});

nodejs中net模塊有什么用

簡(jiǎn)易聊天室

【服務(wù)器】

//chatServer.js
var net = require('net');
var i = 0;
//保存客戶機(jī)
var clientList = [];
var server = net.createServer(function(socket) {
    socket.name = '用戶' + (++i);
    socket.write('【聊天室提示】歡迎' + socket.name + '\n');
    //更新客戶機(jī)數(shù)組
    clientList.push(socket); 
    function showClients(){
        console.log('【當(dāng)前在線用戶】:');
        for(var i=0;i<clientList.length;i++) { 
            console.log(clientList[i].name);
        }        
    }
    showClients();
    socket.on("data", function(data) {
        //把當(dāng)前連接的客戶機(jī)的信息轉(zhuǎn)發(fā)到其他客戶機(jī)  
        for(var i=0;i<clientList.length;i++) { 
            if(socket !== clientList[i]) {      
                clientList[i].write('【' + socket.name + '】:' + data);   
            }  
        }
    });
    socket.on("close", function() {
        //當(dāng)前客戶機(jī)下線時(shí),將其從客戶機(jī)數(shù)組中移除
        clientList.splice(clientList.indexOf(socket), 1);
        showClients();
    });
    socket.on('error', function(err) {
        console.log(socket.name + '退出');
    });
});
server.listen(8080) ;

【客戶機(jī)】

//chatClient.js
var net = require('net');
process.stdin.resume();
process.stdin.setEncoding('utf8');
var client = net.connect({port: 8080},function(){
    console.log('【本機(jī)提示】登錄到聊天室');
    process.stdin.on('data',function(data){
        client.write(data);
    })
    client.on("data", function(data) {
        console.log(data.toString());
    });
    client.on('end', function() {
        console.log('【本機(jī)提示】退出聊天室');
        process.exit();
    });
    client.on('error', function() {
        console.log('【本機(jī)提示】聊天室異常');
        process.exit();
    });
});

nodejs中net模塊有什么用

關(guān)于“nodejs中net模塊有什么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

文章標(biāo)題:nodejs中net模塊有什么用-創(chuàng)新互聯(lián)
URL標(biāo)題:http://bm7419.com/article38/gdgsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷型網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈用戶體驗(yàn)、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)