TCP服務在網路應用中十分常見,目前大多數的應用都是以TCP建構而成的。 net模組提供了一個非同步網路包裝器,用於TCP網路編程,它包含了創建伺服器和客戶端的方法。本文將詳細介紹nodeJS中的net模組。
相關推薦:《nodejs 教學》
IP測試
【net.isIP(input)】
測試是否輸入的為IP 位址。字串無效時傳回 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
伺服器
【 net.createServer([options][, connectionListener])】
建立一個TCP 伺服器,參數如下
options allowHalfOpen: false(默认),如果为true,当另一端socket发送FIN包时socket不会自动发送FIN包。socket变为不可读但可写(半关闭) pauseOnConnect: false(默认),如果为true,当连接到来的时候相关联的socket将会暂停。它允许在初始进程不读取数据情况下,让连接在进程间传递。调用resume()从暂停的socket里读取数据 connectionListener 自动给 'connection' 事件创建监听器
var server = net.createServer(function() { });
【server.listen(port[, host][, backlog][, callback ])】
開始接受指定連接埠port和主機host的連線。如果忽略主機host,伺服器將會接受任何IPv4位址(INADDR_ANY)的直接連線。連接埠為0,則會分配一個隨機連接埠
積壓量(Backlog)為連接等待佇列的最大長度。實際長度由作業系統透過sysctl設定,例如linux上的tcp_max_syn_backlog和somaxconn。這個參數預設值是511
當伺服器被綁定時會觸發'listening'事件。最後一個參數callback將會作為'listening'事件的監聽器
有些使用者會遇到EADDRINUSE錯誤,它表示另一個伺服器已經運行在所要求的連接埠上。處理這個情況的方法是等一段時間後再重試
server.listen(6000);
【server.close([callback])】
伺服器停止接收新的連接,保持現有連接。當所有連線結束的時候伺服器會關閉,並會觸發'close'事件。你可以傳一個回呼函數來監聽'close'事件。如果存在,將會呼叫回呼函數,錯誤(如果有)作為唯一參數
【server.address()】
作業系統傳回綁定的位址、協定族名和伺服器連接埠。尋找哪個連接埠已經被系統綁定時,非常有用
[注意]在'listening' 事件觸發前,不要呼叫server.address()
server.listen(function() { //{ address: '::', family: 'IPv6', port: 53806 } console.log(server.address()); });
【server.maxConnections】
設定這個選項後,當伺服器連線數超過數量時拒絕新連線
一旦已經用child_process.fork() 方法將socket 傳送給子進程, 就不建議使用這個選項
【server.getConnections(callback)】
非同步取得伺服器目前活躍連線的數量。當socket 傳送給子程序後才有效;
回呼函數有2 個參數err 和count
server.getConnections(function(err,count){ console.log(count);//0 })
【事件listening】
當伺服器呼叫server.listen 綁定後會觸發
【事件connection】
{Socket object} 连接对象
當新連線建立後會被觸發。 socket 是net.Socket實例
【事件close】
伺服器關閉時會觸發
[注意]如果存在連接,這個事件不會被觸發直到所有的連接關閉
【事件error】
發生錯誤時觸發
客戶端
【net.connect(options[, connectionListener ])】
【net.createConnection(options[, connectionListener])】
connect()的別名是createConnection()方法
該方法傳回一個新的' net.Socket',並連接到指定的位址和連接埠。當 socket 建立的時候,將會觸發 'connect' 事件。和'net.Socket'有相同的方法
對於TCP sockets,參數options如下
port: 客户端连接到 Port 的端口(必须) host: 客户端要连接到得主机。默认 'localhost' localAddress: 网络连接绑定的本地接口 localPort: 网络连接绑定的本地端口 family : IP 栈版本。默认 4
對於本地域socket,參數options如下
#path: 客户端连接到得路径(必须)
var client = net.connect({port: 5000}, function() {});
Socket
【new net.Socket([options])】
建構一個新的socket 物件
options 物件有以下預設值:
{ fd: null allowHalfOpen: false, readable: false, writable: false }
# # 參數fd允許指定一個存在的檔案描述子。將readable和(或)writable設為true,允許在這個socket上讀或寫(僅在參數fd有效時)
【socket.connect(port[, host][, connectListener])】
【socket.connect(path[, connectListener])】
使用傳入的socket開啟一個連線。如果指定了連接埠port和主機host,TCP socket將開啟socket。如果忽略參數host,則預設為localhost。如果指定了path,socket將會被指定路徑的unix socket 開啟
參數connectListener 將會作為監聽器新增至'connect' 事件
【socket.write(data[, encoding] [, callback])】
在socket上傳送資料。第二個參數指定了字串的編碼,預設是UTF8編碼
如果所有数据成功刷新到内核缓冲区,返回true。如果数据全部或部分在用户内存里,返回false。当缓冲区为空的时候会触发'drain'
当数据最终被完整写入的的时候,可选的callback参数会被执行,但不一定会马上执行
【socket.end([data][, encoding])】
半关闭socket。例如,它发送一个FIN包。可能服务器仍在发送数据。
如果参数data不为空,等同于调用socket.write(data,encoding)后再调用socket.end()
【socket.destroy()】
确保没有 I/O 活动在这个套接字上。只有在错误发生情况下才需要
【socket.pause()】
暂停读取数据。就是说,不会再触发 data 事件。对于控制上传非常有用
【socket.resume()】
调用 pause() 后想恢复读取数据
【socket.setTimeout(timeout[, callback])】
socket 闲置时间超过 timeout 毫秒后 ,将 socket 设置为超时。触发空闲超时事件时,socket 将会收到 'timeout'事件,但是连接不会被断开。用户必须手动调用 end() 或 destroy() 这个socket。
如果 timeout = 0, 那么现有的闲置超时会被禁用。可选的 callback 参数将会被添加成为 'timeout' 事件的一次性监听器
【socket.setNoDelay([noDelay])】
禁用纳格(Nagle)算法。默认情况下 TCP 连接使用纳格算法,在发送前他们会缓冲数据。将 noDelay 设置为 true 将会在调用 socket.write() 时立即发送数据。noDelay 默认值为 true
【socket.setKeepAlive([enable][, initialDelay])】
禁用/启用长连接功能,在发送第一个在闲置socket上的长连接probe之前,可选地设定初始延时。默认false
设定initialDelay(毫秒),来设定收到的最后一个数据包和第一个长连接probe之间的延时。将 initialDelay 设为0,将会保留默认(或者之前)的值。默认值为0
【socket.address()】
操作系统返回绑定的地址,协议族名和服务器端口。返回的对象有 3 个属性,比如{ port: 12346, family: 'IPv4', address: '127.0.0.1' }
【socket.remoteAddress】
远程的 IP 地址字符串
【socket.remoteFamily】
远程IP协议族字符串
【socket.remotePort】
远程端口,数字表示
【socket.localAddress】
远程客户端正在连接的本地IP地址,字符串表示
【socket.localPort】
本地端口地址,数字表示
【socket.bytesRead】
接收的字节数
【socket.bytesWritten】
发送的字节数
【事件lookup】
在解析域名后,但在连接前,触发这个事件。对 UNIX sokcet 不适用
err {Error | Null} 错误对象 address {String} IP 地址。 family {String | Null} 地址类型
【事件connect】
当成功建立 socket 连接时触发、
【事件data】
{Buffer object}
当接收到数据时触发。参数 data 可以是 Buffer 或 String
当 Socket 触发一个 'data' 事件时,如果没有监听器,数据将会丢失
【事件end】
当 socket 另一端发送 FIN 包时,触发该事件
【事件timeout】
当 socket 空闲超时时触发,仅是表明 socket 已经空闲。用户必须手动关闭连接
【事件drain】
当写缓存为空得时候触发。可用来控制上传
【事件error】
错误发生时触发
【事件close】
had_error {Boolean} 如果 socket 传输错误,为 true
当 socket 完全关闭时触发。参数 had_error 是 boolean,它表示是否因为传输错误导致 socket 关闭
简易服务器
【服务器】
//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('有客户机下线了!!!'); }); socket.on('error', function() { console.log('发生意外错误!!!'); }); }) ; server.listen(8080) ;
【客户机】
//client.js var net = require('net') ; var client = net.connect({port: 8080},function(){ client.name = '客户机1'; client.write(client.name + ' 上线了!\n'); client.end(client.name + ' 下线了!\n'); client.on("data", function(data) { console.log(data.toString()); }); });
简易聊天室
【服务器】
//chatServer.js var net = require('net'); var i = 0; //保存客户机 var clientList = []; var server = net.createServer(function(socket) { socket.name = '用户' + (++i); socket.write('【聊天室提示】欢迎' + socket.name + '\n'); //更新客户机数组 clientList.push(socket); function showClients(){ console.log('【当前在线用户】:'); for(var i=0;i<clientlist.length server.listen><p>【客户机】</p> <pre class="brush:php;toolbar:false">//chatClient.js var net = require('net'); process.stdin.resume(); process.stdin.setEncoding('utf8'); var client = net.connect({port: 8080},function(){ console.log('【本机提示】登录到聊天室'); process.stdin.on('data',function(data){ client.write(data); }) client.on("data", function(data) { console.log(data.toString()); }); client.on('end', function() { console.log('【本机提示】退出聊天室'); process.exit(); }); client.on('error', function() { console.log('【本机提示】聊天室异常'); process.exit(); }); });
更多编程相关知识,请访问:编程入门!!
以上是淺談nodejs中的net模組的詳細內容。更多資訊請關注PHP中文網其他相關文章!

引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr

Node.js擅長於高效I/O,這在很大程度上要歸功於流。 流媒體匯總處理數據,避免內存過載 - 大型文件,網絡任務和實時應用程序的理想。將流與打字稿的類型安全結合起來創建POWE

Python和JavaScript在性能和效率方面的差異主要體現在:1)Python作為解釋型語言,運行速度較慢,但開發效率高,適合快速原型開發;2)JavaScript在瀏覽器中受限於單線程,但在Node.js中可利用多線程和異步I/O提升性能,兩者在實際項目中各有優勢。

JavaScript起源於1995年,由布蘭登·艾克創造,實現語言為C語言。 1.C語言為JavaScript提供了高性能和系統級編程能力。 2.JavaScript的內存管理和性能優化依賴於C語言。 3.C語言的跨平台特性幫助JavaScript在不同操作系統上高效運行。

JavaScript在瀏覽器和Node.js環境中運行,依賴JavaScript引擎解析和執行代碼。 1)解析階段生成抽象語法樹(AST);2)編譯階段將AST轉換為字節碼或機器碼;3)執行階段執行編譯後的代碼。

Python和JavaScript的未來趨勢包括:1.Python將鞏固在科學計算和AI領域的地位,2.JavaScript將推動Web技術發展,3.跨平台開發將成為熱門,4.性能優化將是重點。兩者都將繼續在各自領域擴展應用場景,並在性能上有更多突破。

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。

是的,JavaScript的引擎核心是用C語言編寫的。 1)C語言提供了高效性能和底層控制,適合JavaScript引擎的開發。 2)以V8引擎為例,其核心用C 編寫,結合了C的效率和麵向對象特性。 3)JavaScript引擎的工作原理包括解析、編譯和執行,C語言在這些過程中發揮關鍵作用。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

禪工作室 13.0.1
強大的PHP整合開發環境