Node.js net模塊功能及事件監(jiān)聽(tīng)用法分析
本文實(shí)例講述了Node.js net模塊功能及事件監(jiān)聽(tīng)用法。分享給大家供大家參考,具體如下:
net模塊
對(duì)比C語(yǔ)言的網(wǎng)絡(luò)編程,Node.js有更加簡(jiǎn)便的開(kāi)發(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)聽(tīng).
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)聽(tīng)
| 常用監(jiān)聽(tīng)事件事件類型 | 事件觸發(fā)條件 |
|---|---|
| connection | 連接成功調(diào)用的事件 |
| error | 發(fā)生錯(cuò)誤調(diào)用的事件 |
| close | 當(dāng)server關(guān)閉的時(shí)候觸發(fā). 注意,如果有連接存在, 直到所有的連接結(jié)束才會(huì)觸發(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í)候,如果沒(méi)有監(jiān)聽(tīng)者數(shù)據(jù)將會(huì)丟失。 |
| listening | 當(dāng)服務(wù)被綁定后調(diào)用 server.listen(). |
| end | 當(dāng) socket 的另一端發(fā)送一個(gè) FIN 包的時(shí)候觸發(fā),從而結(jié)束 socket 的可讀端。 |
監(jiān)聽(tīng)事件的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ò)誤就會(huì)調(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那么底層會(huì)先轉(zhuǎn)換為utf8字符串傳過(guò)去
client_socket.on("data",function(data){
console.log(data);
});
//用戶斷線離開(kāi)
client_socket.on("close",function(client_socket){
console.log("close socket");
});
});
//編寫代碼指示server監(jiān)聽(tīng)到某個(gè)端口上
//配置好之后就會(huì)監(jiān)聽(tīng)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對(duì)server的監(jiān)聽(tīng)事件
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");
});
//對(duì)方發(fā)送關(guān)閉數(shù)據(jù)包的事件
socket.on("end",function(){
console.log("end event");
})
//當(dāng)有數(shù)據(jù)發(fā)送過(guò)來(lái)的時(shí)候調(diào)用
socket.on("data",function(data){
console.log(data);
});
希望本文所述對(duì)大家nodejs程序設(shè)計(jì)有所幫助。
相關(guān)文章
nodejs環(huán)境使用Typeorm連接查詢Oracle數(shù)據(jù)
這篇文章主要介紹了nodejs環(huán)境使用Typeorm連接查詢Oracle數(shù)據(jù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
使用Node.js實(shí)現(xiàn)一個(gè)多人游戲服務(wù)器引擎
這篇文章主要給大家介紹了關(guān)于如何使用Node.js實(shí)現(xiàn)一個(gè)多人游戲服務(wù)器引擎的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Node.js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
使用node.js半年來(lái)總結(jié)的 10 條經(jīng)驗(yàn)
從3月初來(lái)到帝都某創(chuàng)業(yè)公司的服務(wù)器團(tuán)隊(duì)實(shí)習(xí),到現(xiàn)在已接近半年的時(shí)間。PS: 已轉(zhuǎn)正,服務(wù)器端用的 Node。2014-08-08
Node.js API詳解之 util模塊用法實(shí)例分析
這篇文章主要介紹了Node.js API詳解之 util模塊用法,結(jié)合實(shí)例形式分析了node.js API中util模塊基本功能與相關(guān)函數(shù)使用技巧,需要的朋友可以參考下2020-05-05
Node.js開(kāi)發(fā)者必須了解的4個(gè)JS要點(diǎn)
這篇文章主要介紹了Node.js開(kāi)發(fā)者必須了解的4個(gè)JS要點(diǎn),Node.js是一個(gè)面向服務(wù)器的框架,立足于Chrome強(qiáng)大的V8 JS引擎。盡管它由C++編寫而成,但是它及其應(yīng)用是運(yùn)行在JS上的,需要的朋友可以參考下2016-02-02

