啟動腳本app.js如下:
#!/usr/bin/env node
var events = require('events');var net = require('net');var channel = new events.EventEmitter();channel.clients = {};channel.subscriptions = {};
/*添加join事件的監聽器,保存用戶的client對象,以便程序可以將數據發送給用戶*/
channel.on('join',function(id,client){ this.clients[id] = client;this.subscriptions[id] = function(senderId,message){
/*忽略發出這一廣播數據的用戶*/
if(id != senderId){ this.clients[id].write(message); }}
/*添加一個專門針對當前用戶的broadcast事件監聽器*/
this.on('broadcast',this.subscriptions[id]);
/*client連接進來,顯示歡迎字幕,并統計當前client數量*/
var welcome = "Welcome!/n"+'Guests online: '+this.listeners('broadcast').length;client.write(welcome+'/n');
/*通知其它client用戶,當前client用戶進入聊天室*/
channel.emit('broadcast',id,id+' come in the chat./n');});
/*添加client用戶離開的leave事件的監聽器,通知所有人client用戶離開了*/
channel.on('leave',function(id){ channel.removeListener( 'broadcast',this.subscriptions[id]); channel.emit('broadcast',id,id+' has left the chat./n');});
/*關閉聊天室,移出所有監聽*/
channel.on('shutdown',function(){channel.emit('broadcast','','chat has shut down./n'); channel.removeAllListeners( 'broadcast');});
/*設置最大監聽的數量,默認超過10個監聽會*/
channel.setMaxListeners(50);
var server = net.createServer(function(client){ var id = client.remoteAddress + ':' + client.remotePort;console.log('client id '+id);
/*當有client用戶連接到服務器上來時發出一個join事件*/
channel.emit('join',id,client); client.on('data',function(data){data = data.toString();console.log(data);
/*收到s字符,關閉聊天室*/
if(data == "s"){console.log(data);channel.emit('shutdown');}else{
/*廣播聊天信息*/
channel.emit('broadcast',id,data);
}
});
/*添加client用戶斷開連接的監聽事件*/
client.on('close',function(){channel.emit('leave',id); });});server.listen(3000);console.log('started ... ');
啟動node服務:node app.js
操作系統命令行,輸入命令,進入聊天室:telent 127.0.0.1 3000
多開幾個命令窗口,查看效果。
新聞熱點
疑難解答