Skip to content

Commit b99c041

Browse files
committed
using redis
1 parent 45d281d commit b99c041

File tree

2 files changed

+66
-19
lines changed

2 files changed

+66
-19
lines changed

public/draw.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,20 @@ $(function(){
7979
s = $('#serverStats');
8080
s.empty();
8181
s.append("<tr><th>Server Latency</th><td>"+latency+" ms</td></tr>");
82+
socket.emit('stats');
83+
});
84+
85+
socket.on('stats', function(data){
86+
var s = $('#serverStats');
8287
for (var key in data) {
8388
if (data.hasOwnProperty(key)) {
84-
s.append("<tr><th>"+key+"</th><td>"+data[key]+"</td></tr>");
89+
s.append("<tr><th>" +
90+
key +
91+
"</th><td>" +
92+
data[key] +
93+
"</td></tr>");
8594
}
8695
}
87-
8896
});
8997

9098
var prev = {};

server.js

Lines changed: 56 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@ var express = require('express'), app = express();
55
var server = http.createServer(app).listen(port);
66
var jade = require('jade');
77
var io = require('socket.io').listen(server);
8-
var os = require('os')
8+
var os = require('os');
9+
var redis = require("redis"),
10+
redisClient = redis.createClient();
911

10-
var drawActionStack = [];
11-
var connectedClients = 0;
12+
var localConnectedClients = 0;
1213
var clients = {};
1314
var netUsage = 0;
1415

@@ -27,11 +28,27 @@ app.get('/', function(req, res){
2728

2829
io.set("log level", 1);
2930

31+
redisClient.on("error", function(err){
32+
console.log("Redis Error: " + err);
33+
});
34+
35+
//set client connection key if not exists
36+
redisClient.setnx("clientcount", 0);
37+
3038
io.sockets.on('connection', function(socket){
39+
var drawActions = [];
40+
localConnectedClients += 1;
41+
redisClient.incr("clientcount");
3142

32-
connectedClients += 1;
33-
socket.emit('drawActionHistory', drawActionStack);
34-
netUsage += sizeof(drawActionStack);
43+
redisClient.lrange("drawactions", 0, -1, function(err, replies){
44+
replies.forEach(function(reply, i){
45+
drawActions.push(JSON.parse(reply));
46+
});
47+
48+
//send data
49+
socket.emit('drawActionHistory', drawActions);
50+
netUsage += sizeof(drawActions);
51+
});
3552

3653
socket.on('mousemove', function(data){
3754
if(data.id in clients){
@@ -45,7 +62,9 @@ io.sockets.on('connection', function(socket){
4562
toY: data.y,
4663
color: data.color
4764
};
48-
drawActionStack.push(drawAction);
65+
66+
redisClient.rpush("drawactions",
67+
JSON.stringify(drawAction));
4968
}
5069

5170
} else {
@@ -59,13 +78,14 @@ io.sockets.on('connection', function(socket){
5978
clients[data.id].x = data.x;
6079
clients[data.id].y = data.y;
6180

62-
netUsage += sizeof(data) * connectedClients;
81+
netUsage += sizeof(data) * localConnectedClients;
6382
socket.broadcast.emit('moving', data);
6483
});
6584

6685
socket.on('chatmessage', function(data){
67-
netUsage += sizeof(data) * connectedClients;
68-
data.message = data.message.replace(/(<([^>]+)>)/ig,""); //take out possible tags.
86+
netUsage += sizeof(data) * localConnectedClients;
87+
//take out possible tags.
88+
data.message = data.message.replace(/(<([^>]+)>)/ig,"");
6989
//limit chat message length.
7090
if (data.message.length <= 135) {
7191
socket.broadcast.emit('chatmessage', {
@@ -75,22 +95,41 @@ io.sockets.on('connection', function(socket){
7595
}
7696
});
7797

78-
socket.on('ping', function(id){
98+
socket.on('stats', function(id){
99+
var multi = redisClient.multi();
79100
var data = {
80-
drawStackSize: drawActionStack.length,
81-
connectedClients: connectedClients,
82101
load1: (os.loadavg()[0]).toFixed(2),
83-
netUsageKB: (netUsage / 1000).toFixed(1)
102+
netUsageKB: (netUsage / 1000).toFixed(1),
103+
nodeConnections: localConnectedClients
84104
};
85-
netUsage += sizeof(data);
86-
socket.emit('pong', data);
105+
106+
multi.llen("drawactions", function(err, reply){
107+
data['drawStackSize'] = reply;
108+
});
109+
110+
multi.get('clientcount', function(err, reply){
111+
data['globalConnectedClients'] = reply;
112+
});
113+
114+
multi.exec(function(err, replies){
115+
socket.emit('stats', data);
116+
netUsage += sizeof(data);
117+
});
118+
});
119+
120+
socket.on('ping', function(data){
121+
socket.emit('pong');
87122
});
88123

89124
socket.on('disconnect', function() {
90-
connectedClients--;
125+
localConnectedClients -= 1;
126+
redisClient.decr("clientcount");
91127
});
92128
});
93129

130+
/**
131+
* Get the estimated size of an object in bytes
132+
*/
94133
function sizeof(object) {
95134
var objectList = [];
96135
var stack = [object];

0 commit comments

Comments
 (0)