Skip to content

Instantly share code, notes, and snippets.

@zakky-dev
Created September 3, 2013 07:10
Show Gist options
  • Save zakky-dev/6420581 to your computer and use it in GitHub Desktop.
Save zakky-dev/6420581 to your computer and use it in GitHub Desktop.
node.js + socket.io + redisstoreで何故かソケット情報が蓄積する。
var SERVER_PORT = 80;
var LIFE_TIME = 30000;
var REDIS_HOST = "xxx.xxx.xxx";
var REDIS_PORT = 6379;
var http = require('http');
var io = require('socket.io');
var server = http.createServer();
var manager = null;
var namespace = null;
var diff = 0;
function initSocket(socket) {
setTimeout(function() {
socket.disconnect();
}, LIFE_TIME);
socket.join("test.1234");
socket.on("disconnect", function() {
diff -= 1;
});
}
function countup(dict) {
var res = 0;
for(var i in dict) {
res += 1;
}
return res;
}
server.on("request", function(req, res) {
if (namespace) {
// 管理情報を表示
var log_params = {
count : countup(namespace.sockets),
trans : countup(manager.transports),
hands : countup(manager.handshaken),
connects : countup(manager.connected),
opens : countup(manager.open),
closes : countup(manager.closed),
rooms : countup(manager.rooms),
roomClients : countup(manager.roomClients)
}
console.log("clients", log_params);
}
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end("end");
});
var configure = {
'polling duration': 2,
'close timeout': 20
};
manager = io.listen(server, configure);
// RedisStoreを利用するとソケット情報が蓄積する
var options = {
redisPub: {port: REDIS_PORT, host: REDIS_HOST},
redisSub: {port: REDIS_PORT, host: REDIS_HOST},
redisClient: {port: REDIS_PORT, host: REDIS_HOST}
};
manager.set("store", new (require('socket.io/lib/stores/redis'))(options));
namespace = manager.sockets.on("connection", function(socket) {
diff += 1;
initSocket(socket);
});
server.listen(SERVER_PORT);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment