nodejs原生態模塊,寫個聊天室

目的:用控制檯實現個聊天室

使用模塊:net,process

開始前的廢話:對於初學者來說,先理解官方文檔很重要。

有很多寫聊天室的,大多引用的第三方模塊,難免會增加新手學習負擔,這裏我只使用官方中的net和process模塊。

希望能給新手,更好的理解這兩個模塊(net模塊爲主,process模塊爲輔)


正文:

項目主要就兩個文件

server.js:服務器

client.js:客戶端(可以多開)

/*server.js*/
var
net=require('net'); var server=net.createServer(), clientList=[];
//clientList 保存連接的所有客戶端
var options={"host":"127.0.0.1","port":"1117"};
/*給數組添加一個方法,判斷obj是否存在此數組中*/ Array.prototype.contains
=function (obj) { for (var i = 0; i < this.length; i++) { if(this[i]===obj){ return true; } } return false; } server.on('connection',function (client) { client.name=client.remoteAddress+':'+client.remotePort; console.log(client.name+' 已經連接'); if(!clientList.contains(client)){ clientList.push(client); } client.on('data',function (data) { console.log(client.name+' '+data); //將此客戶端的信息,發送給 除此客戶端 的所有客戶端 for (var i = 0; i < clientList.length; i++) { if(client!==clientList[i]){ clientList[i].write(clientList[i].name+' '+data); } } }); client.on('error',function () { console.log(this.name+' 發生異常'); }); client.on('end',function(){ console.log(this.name+' 斷開連接');
//這裏需要將此 client 從lientList中移除 }); });

 

/*client.js*/
var
net=require('net'); var options={"host":"127.0.0.1","port":1117}; var client=net.connect(options,function(){ console.log("客戶端已連接"); consoleRead(client); }); client.on('data',function (data) { console.log(data.toString()); });
/*因爲nodejs控制檯運行後,默認是不支持輸入的。
需要使用 process.stdin.resume().讓其可以接收輸入信息
process.stdin.on('data',Function)獲取輸入的內容
如果不需要再輸入時,需要用process.stdin.pause()來停止接受輸入信息。
參數 client:當前客戶端
*/
function consoleRead(client){ process.stdin.resume(); console.log("輸入聊天內容:"); process.stdin.setEncoding('utf8'); process.stdin.on('data', function(chunk) { //process.stdin.pause(); if(chunk.trim()==="end"){ console.log('已斷開和服務器的連接'); client.end(); }else{ client.write(chunk); } });
}

下面來看看效果圖:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章