Node.js net模塊功能及事件監(jiān)聽用法分析
本文實(shí)例講述了Node.js net模塊功能及事件監(jiān)聽用法。分享給大家供大家參考,具體如下:
net模塊
對比C語言的網(wǎng)絡(luò)編程,Node.js有更加簡便的開發(fā)模式與模塊提供。它就是net模塊
在需要使用的時(shí)候只需要require("net")就可以引入模塊了。
var net = require("net");
服務(wù)端編程
引入模塊的前提下:
1. 創(chuàng)建一個(gè)新的TCP或IPC服務(wù)
var server = net.createServer(function(client_socket) { console.log("client coming"); });
2. 創(chuàng)建connections 啟動(dòng)一個(gè) server 監(jiān)聽.
server.listen({ host:'127.0.0.1', port:6080, exclusive:true, });
客戶端編程
引入net模塊。
1. 創(chuàng)建一個(gè)連接即可
//端口要與需要連接的服務(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ā)生錯(cuò)誤調(diào)用的事件 |
close | 當(dāng)server關(guān)閉的時(shí)候觸發(fā). 注意,如果有連接存在, 直到所有的連接結(jié)束才會觸發(fā)這個(gè)事件 |
data | 當(dāng)接收到數(shù)據(jù)的時(shí)觸發(fā)該事件。data 參數(shù)是一個(gè) Buffer 或 String。數(shù)據(jù)編碼由 socket.setEncoding() 設(shè)置。注意當(dāng) Socket 發(fā)送 data 事件的時(shí)候,如果沒有監(jiān)聽者數(shù)據(jù)將會丟失。 |
listening | 當(dāng)服務(wù)被綁定后調(diào)用 server.listen(). |
end | 當(dāng) socket 的另一端發(fā)送一個(gè) FIN 包的時(shí)候觸發(fā),從而結(jié)束 socket 的可讀端。 |
監(jiān)聽事件的API都是使用on()方法。
Demo演示
下面有一個(gè)詳細(xì)的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ā)送的錯(cuò)誤就會調(diào)用 client_socket.on("error",function(err){ console.log("error"); }); //有接收到客戶端的數(shù)據(jù)調(diào)用的函數(shù) //data 默認(rèn)是Hex(二進(jìn)制編碼)格式,如果強(qiáng)制設(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)聽到某個(gè)端口上 //配置好之后就會監(jiān)聽server 等待客戶端接入 //host==> 地址 port ==>端口 exclusive ==> 獨(dú)占模式 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的方式編碼成二進(jìn)制的數(shù)據(jù)傳輸 socket.write("Hello World!","utf8"); }); //發(fā)生錯(cuò)誤調(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"); }) //當(dāng)有數(shù)據(jù)發(fā)送過來的時(shí)候調(diào)用 socket.on("data",function(data){ console.log(data); });
希望本文所述對大家nodejs程序設(shè)計(jì)有所幫助。
相關(guān)文章
nodejs環(huán)境使用Typeorm連接查詢Oracle數(shù)據(jù)
這篇文章主要介紹了nodejs環(huán)境使用Typeorm連接查詢Oracle數(shù)據(jù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12使用Node.js實(shí)現(xiàn)一個(gè)多人游戲服務(wù)器引擎
這篇文章主要給大家介紹了關(guān)于如何使用Node.js實(shí)現(xiàn)一個(gè)多人游戲服務(wù)器引擎的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用Node.js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03使用node.js半年來總結(jié)的 10 條經(jīng)驗(yàn)
從3月初來到帝都某創(chuàng)業(yè)公司的服務(wù)器團(tuán)隊(duì)實(shí)習(xí),到現(xiàn)在已接近半年的時(shí)間。PS: 已轉(zhuǎn)正,服務(wù)器端用的 Node。2014-08-08Node.js API詳解之 util模塊用法實(shí)例分析
這篇文章主要介紹了Node.js API詳解之 util模塊用法,結(jié)合實(shí)例形式分析了node.js API中util模塊基本功能與相關(guān)函數(shù)使用技巧,需要的朋友可以參考下2020-05-05Node.js開發(fā)者必須了解的4個(gè)JS要點(diǎn)
這篇文章主要介紹了Node.js開發(fā)者必須了解的4個(gè)JS要點(diǎn),Node.js是一個(gè)面向服務(wù)器的框架,立足于Chrome強(qiáng)大的V8 JS引擎。盡管它由C++編寫而成,但是它及其應(yīng)用是運(yùn)行在JS上的,需要的朋友可以參考下2016-02-02