var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); var spawn = require('child_process').spawn; var request = require("request"); var fs = require("fs"); var Tail = require('tail').Tail; app.get('/', function(req, res){ res.send('

Welcome Realtime Server

'); }); //在线用户 var onlineUsers = {}; //当前在线人数 var onlineCount = 0; io.on('connection', function(socket){ //console.log('a user connected'); //监听新用户加入 socket.on('login', function(obj){ request({ uri:"http://127.0.0.1/node_auth/", method:"POST", form:{ username:obj.username, seed:obj.seed, filename:obj.filename } },function(error,response,body){ try{ var result = JSON.parse(body) console.log(body); if(result['auth']['result'] != 'failed'){ fs.exists(obj.filename, function(result) { //将新加入用户的唯一标识当作socket的名称,后面退出的时候会用到 socket.name = obj.userid; socket.fileName = obj.filename; var tail = new Tail(obj.filename); //2015-03-06 当用户打开监控窗口时,会把已存在的文件内容打印出来 fs.readFile(obj.filename, 'utf8', function (err,data) { if (err) { return console.log(err); } var existData = {userid:obj.userid,username:obj.username,content:data,option:'exist'}; socket.emit('message',existData); }); tail.on('line',function(data) { //console.log(data); var newData = {userid:obj.userid,username:obj.username,content:data,option:'new'}; socket.emit('message',newData); }); socket.tail = tail; //检查在线列表,如果不在里面就加入 if(!onlineUsers.hasOwnProperty(obj.userid)) { onlineUsers[obj.userid] = obj.username; //在线人数+1 onlineCount++; } }); } }catch(err){ console.log(err) } }); //var tail = spawn("tail", ['-f', obj.filename]); //tail.stdout.on('data',function(data){ // var content = data.toString(); // //console.log(content); // var newData = {userid:obj.userid,username:obj.username,content:content}; // socket.emit('message',newData); //}); //向所有客户端广播用户加入 //io.emit('login', {onlineUsers:onlineUsers, onlineCount:onlineCount, user:obj}); //console.log(obj.username+'加入了聊天室'); }); //监听用户退出 socket.on('disconnect', function(){ //将退出的用户从在线列表中删除 if(onlineUsers.hasOwnProperty(socket.name)) { //退出用户的信息 var obj = {userid:socket.name, username:onlineUsers[socket.name]}; if( socket.tail){ socket.tail.unwatch(); } //删除 delete onlineUsers[socket.name]; //在线人数-1 onlineCount--; //向所有客户端广播用户退出 //io.emit('logout', {onlineUsers:onlineUsers, onlineCount:onlineCount, user:obj}); ////console.log(obj.username+'退出了聊天室'); } }); //监听用户发布聊天内容 socket.on('message', function(obj){ //向所有客户端广播发布的消息 //io.emit('message', obj); socket.emit('message',obj); ////console.log(obj.username+'说:'+obj.content); }); }); http.listen(3000, function(){ console.log('listening on *:3000'); });