nodejs簡單實(shí)現(xiàn)TCP服務(wù)器端和客戶端的聊天功能示例
更新時間:2018年01月04日 09:19:16 作者:wwwjiahuan
這篇文章主要介紹了nodejs簡單實(shí)現(xiàn)TCP服務(wù)器端和客戶端的聊天功能,結(jié)合實(shí)例形式分析了nodejs基于TCP協(xié)議實(shí)現(xiàn)的聊天程序客戶端與服務(wù)器端具體步驟與相關(guān)操作技巧,代碼備有較為詳盡的注釋便于理解,需要的朋友可以參考下
本文實(shí)例講述了nodejs簡單實(shí)現(xiàn)TCP服務(wù)器端和客戶端的聊天功能。分享給大家供大家參考,具體如下:
服務(wù)器端
var net = require('net');
var server = net.createServer();
//聚合所有客戶端
var sockets = [];
//接受新的客戶端連接
server.on('connection', function(socket){
console.log('got a new connection');
sockets.push(socket);
//從連接中讀取數(shù)據(jù)
socket.on('data', function(data){
console.log('got data:', data);
//廣播數(shù)據(jù)
//每當(dāng)一個已連接的用戶輸入數(shù)據(jù),就將這些數(shù)據(jù)廣播給其他所有已連接的用戶
sockets.forEach(function(otherSocket){
if (otherSocket !== socket){
otherSocket.write(data);
}
});
//刪除被關(guān)閉的連接
socket.on('close', function(){
console.log('connection closed');
var index = sockets.indexOf(socket);
sockets.splice(index, 1);
});
});
});
server.on('error', function(err){
console.log('Server error:', err.message);
});
server.on('close', function(){
console.log('Server closed');
});
server.listen(4000);
客戶端
var net = require('net');
var port = 4000;
var quitting = false;
var conn;
var retryTimeout = 3000; //三秒,定義三秒后重新連接
var retriedTimes = 0; //記錄重新連接的次數(shù)
var maxRetries = 10; //最多重新連接十次
process.stdin.resume(); //process.stdin流來接受用戶的鍵盤輸入,這個可讀流初始化時處于暫停狀態(tài),調(diào)用流上的resume()方法來恢復(fù)流
process.stdin.on('data', function(data){
if (data.toString().trim().toLowerCase() === 'quit'){
quitting = true;
console.log('quitting');
conn.end();
process.stdin.pause();
} else {
conn.write(data);
}
});
//連接時設(shè)置最多連接十次,并且開啟定時器三秒后再連接
(function connect() {
function reconnect() {
if (retriedTimes >= maxRetries) {
throw new Error('Max retries have been exceeded, I give up.');
}
retriedTimes +=1;
setTimeout(connect, retryTimeout);
}
conn = net.createConnection(port);
conn.on('connect', function() {
retriedTimes = 0;
console.log('connect to server');
});
conn.on('error', function(err) {
console.log('Error in connection:', err);
});
conn.on('close', function() {
if(! quitting) {
console.log('connection got closed, will try to reconnect');
reconnect();
}
});
//打印
conn.pipe(process.stdout, {end: false});
})();
希望本文所述對大家nodejs程序設(shè)計(jì)有所幫助。
相關(guān)文章
npm?install安裝失敗報(bào)錯:The?operation?was?rejected?by?your?
這篇文章主要給大家介紹了關(guān)于npm?install安裝失敗報(bào)錯:The?operation?was?rejected?by?your?operating?system的相關(guān)資料,文中給出了多種解決方法供大家參考學(xué)習(xí),需要的朋友可以參考下2023-04-04
Nodejs express框架一個工程中同時使用ejs模版和jade模版
這篇文章主要介紹了Nodejs express框架一個工程中同時使用ejs模版和jade模版 的相關(guān)資料,需要的朋友可以參考下2015-12-12
nodejs遍歷文件夾下并操作HTML/CSS/JS/PNG/JPG的方法
這篇文章主要介紹了nodejs遍歷文件夾下并操作HTML/CSS/JS/PNG/JPG的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-11-11
使用Fetch API執(zhí)行GraphQL查詢和變體問題
這篇文章主要介紹了使用Fetch API執(zhí)行GraphQL查詢和變體問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04

