Node.js net模塊功能及事件監(jiān)聽用法分析
本文實例講述了Node.js net模塊功能及事件監(jiān)聽用法。分享給大家供大家參考,具體如下:
net模塊
對比C語言的網(wǎng)絡(luò)編程,Node.js有更加簡便的開發(fā)模式與模塊提供。它就是net模塊
在需要使用的時候只需要require("net")就可以引入模塊了。
var net = require("net");
服務(wù)端編程
引入模塊的前提下:
1. 創(chuàng)建一個新的TCP或IPC服務(wù)
var server = net.createServer(function(client_socket) { console.log("client coming"); });
2. 創(chuàng)建connections 啟動一個 server 監(jiān)聽.
server.listen({ host:'127.0.0.1', port:6080, exclusive:true, });
客戶端編程
引入net模塊。
1. 創(chuàng)建一個連接即可
//端口要與需要連接的服務(wù)器端口一致 var socket = net.connect({ port:6080, host:'127.0.0.1', }, function(){ console.log("connected to server!"); });
效果
事件監(jiān)聽
常用監(jiān)聽事件事件類型 | 事件觸發(fā)條件 |
---|---|
connection | 連接成功調(diào)用的事件 |
error | 發(fā)生錯誤調(diào)用的事件 |
close | 當server關(guān)閉的時候觸發(fā). 注意,如果有連接存在, 直到所有的連接結(jié)束才會觸發(fā)這個事件 |
data | 當接收到數(shù)據(jù)的時觸發(fā)該事件。data 參數(shù)是一個 Buffer 或 String。數(shù)據(jù)編碼由 socket.setEncoding() 設(shè)置。注意當 Socket 發(fā)送 data 事件的時候,如果沒有監(jiān)聽者數(shù)據(jù)將會丟失。 |
listening | 當服務(wù)被綁定后調(diào)用 server.listen(). |
end | 當 socket 的另一端發(fā)送一個 FIN 包的時候觸發(fā),從而結(jié)束 socket 的可讀端。 |
監(jiān)聽事件的API都是使用on()方法。
Demo演示
下面有一個詳細的demo可自行嘗試
tcpserver.js
//tcpserver.js var net = require('net'); var server = net.createServer(function(client_socket) { console.log("client coming"); client_socket.setEncoding("utf8"); //接收到客戶端發(fā)送的錯誤就會調(diào)用 client_socket.on("error",function(err){ console.log("error"); }); //有接收到客戶端的數(shù)據(jù)調(diào)用的函數(shù) //data 默認是Hex(二進制編碼)格式,如果強制設(shè)置為utf8那么底層會先轉(zhuǎn)換為utf8字符串傳過去 client_socket.on("data",function(data){ console.log(data); }); //用戶斷線離開 client_socket.on("close",function(client_socket){ console.log("close socket"); }); }); //編寫代碼指示server監(jiān)聽到某個端口上 //配置好之后就會監(jiān)聽server 等待客戶端接入 //host==> 地址 port ==>端口 exclusive ==> 獨占模式 server.listen({ host:'127.0.0.1', port:6080, exclusive:true, }); server.on("connection",function(client_socket){ console.log("connection"); }); //server.unref();//停止node對server的監(jiān)聽事件 server.on("error",function (error) { console.log("error is on server",error); }); //服務(wù)器關(guān)閉事件 server.on("close",function(client_socket){ console.log("close server"); });
tcpclient.js
//tcpclient.js var net = require("net"); //net.socket類 var socket = net.connect({ port:6080, host:'127.0.0.1', }, function(){ console.log("connected to server!"); }); //連接成功調(diào)用的事件 socket.on("connect",function(){ console.log("connect success"); //已utf-8的方式編碼成二進制的數(shù)據(jù)傳輸 socket.write("Hello World!","utf8"); }); //發(fā)生錯誤調(diào)用的事件 socket.on("error",function (err) { console.log("error is ",err); }); //socket 關(guān)閉事件 socket.on("close",function(){ console.log("close"); }); //對方發(fā)送關(guān)閉數(shù)據(jù)包的事件 socket.on("end",function(){ console.log("end event"); }) //當有數(shù)據(jù)發(fā)送過來的時候調(diào)用 socket.on("data",function(data){ console.log(data); });
希望本文所述對大家nodejs程序設(shè)計有所幫助。
相關(guān)文章
nodejs環(huán)境使用Typeorm連接查詢Oracle數(shù)據(jù)
這篇文章主要介紹了nodejs環(huán)境使用Typeorm連接查詢Oracle數(shù)據(jù),本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12使用Node.js實現(xiàn)一個多人游戲服務(wù)器引擎
這篇文章主要給大家介紹了關(guān)于如何使用Node.js實現(xiàn)一個多人游戲服務(wù)器引擎的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者使用Node.js具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03使用node.js半年來總結(jié)的 10 條經(jīng)驗
從3月初來到帝都某創(chuàng)業(yè)公司的服務(wù)器團隊實習(xí),到現(xiàn)在已接近半年的時間。PS: 已轉(zhuǎn)正,服務(wù)器端用的 Node。2014-08-08