From dc782ca5b5f529a75f812d45fdcd505d351f00f1 Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 12 Nov 2014 15:38:26 +0800 Subject: [PATCH] add websocket --- webroot/AutoSa/websocket/index.js | 92 +++++++++++++++++++++++++++ webroot/AutoSa/websocket/package.json | 11 ++++ 2 files changed, 103 insertions(+) create mode 100644 webroot/AutoSa/websocket/index.js create mode 100644 webroot/AutoSa/websocket/package.json diff --git a/webroot/AutoSa/websocket/index.js b/webroot/AutoSa/websocket/index.js new file mode 100644 index 000000000..54a98f40f --- /dev/null +++ b/webroot/AutoSa/websocket/index.js @@ -0,0 +1,92 @@ +var app = require('express')(); +var http = require('http').Server(app); +var io = require('socket.io')(http); +var spawn = require('child_process').spawn; + + + +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){ + //将新加入用户的唯一标识当作socket的名称,后面退出的时候会用到 + socket.name = obj.userid; + socket.fileName = obj.filename; + var tail = new Tail(obj.filename); + console.log(obj.filename); + tail.on('line',function(data) { + console.log(data); + var newData = {userid:obj.userid,username:obj.username,content:data}; + socket.emit('message',newData); + }); +// 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); +// }); + + + socket.tail = tail; + + //检查在线列表,如果不在里面就加入 + if(!onlineUsers.hasOwnProperty(obj.userid)) { + onlineUsers[obj.userid] = obj.username; + //在线人数+1 + onlineCount++; + } + + //向所有客户端广播用户加入 + 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'); +}); diff --git a/webroot/AutoSa/websocket/package.json b/webroot/AutoSa/websocket/package.json new file mode 100644 index 000000000..c9fbd5987 --- /dev/null +++ b/webroot/AutoSa/websocket/package.json @@ -0,0 +1,11 @@ +{ + "name": "web-socket", + "version": "0.0.1", + "description": "my first realtime server", + "dependencies": { + "express": "~4.10.1", + "socket.io": "~1.2.0", + "node-tail": "0.0.4", + "tail": "~0.4.0" + } +}