I create one test app and detect cyclic timeout on client side PING event.
Main test is always timeout ping event after 10 item success.
Server run localhost ubuntu14 64bit, client use firefox 33 NodeJs 0.10.29 SC update 2014.11.10.
Client:
<script type="text/javascript">
var ChatApp = function(params){
var self = this;
// Initiate the connection to the server
self.socket = socketCluster.connect();
self.authObj = new Object({
username:'anonymus',
password:'secret',
roomid:'123456789'
});
self.socket.on('error', function (err) {
throw 'Socket error - ' + err;
});
self.socket.on('connect', function (socketId) {
console.debug('Connected:'+socketId);
self.commObj = new Object({
token:0,
sid:0,
channel:0
});
self.socket.emit('auth',self.authObj,function(err,res){
if (err) console.log('Auth error:'+err);
if (res.status == 'success'){
console.log('Auth successfull');
self.commObj.token = res.token;
self.commObj.sid = self.socket.ssid;
self.socket.subscribe(self.authObj.roomid, function (err) {
if (err) {
console.log('Failed to subscribe to room event channel:'+self.authObj.roomid);
}else{
self.commObj.channel = self.authObj.roomid;
}
});
}else{
console.log('Auth failed, status:'+res.status);
}
});
});
self.socket.on('rand', function (num,res) {
res.end();
console.log('RANDOM:', num);
if (num.rand) {
document.body.innerHTML = 'RANDOM: ' + num.rand + '
';
}
});
self.socket.on('pong', function (num,res) {
res.end();
console.log('PONG:', num);
});
setInterval(function () {
if (self.commObj.channel){
self.socket.emit('ping',self.commObj,function(err){
if (err){
console.log('Emit error:'+err);
if (err.err == 'unauthorizedSession'){
self.socket = socketCluster.connect();
}
}
});
}
}, 10000);
};
var chat1 = new ChatApp();
</script>
Server:
var fs = require('fs');
var express = require('express');
var serveStatic = require('serve-static');
var log4js = require('log4js');
log4js.configure('log4js_configuration.json',{});
module.exports.run = function (worker) {
var log = log4js.getLogger('SCW_'+process.pid);
log.info('>> Worker PID:', process.pid);
var app = require('express')();
// Get a reference to our raw Node HTTP server
var httpServer = worker.getHTTPServer();
// Get a reference to our realtime SocketCluster server
var scServer = worker.getSCServer();
app.use(serveStatic(__dirname + '/public'));
httpServer.on('req', app);
var activeSessions = {};
var count = 0;
//Miel艖tt 谩tad贸dik a socket.connection-ra itt lehet vizsg谩lni dolgokat
scServer.addMiddleware(scServer.MIDDLEWARE_HANDSHAKE, function (req, next) {
log.debug('Handshake');
next();
});
//Miel艖tt 谩tad贸dik a socket.subscribe-ra itt lehet vizsg谩lni dolgokat
scServer.addMiddleware(scServer.MIDDLEWARE_SUBSCRIBE,
function (socket, channel, next) {
socket.session.get('isUserAuthorized', function (err, value) {
if (err){
log.warn('Session error:'+JSON.stringify(err));
}
if (value) {
next();// Allow
} else {
next({err:'unauthorizedSession',sid:socket.session.id,channel:channel}); // Block
}
});
}
);
//Miel艖tt 谩tad贸dik a socket.publish-ra itt lehet vizsg谩lni dolgokat
scServer.addMiddleware(scServer.MIDDLEWARE_PUBLISH,
function (socket, event, data, next) {
socket.session.get('isUserAuthorized', function (err, value) {
if (err){
log.warn('Session error:'+JSON.stringify(err));
}
if (value) {
next();// Allow
} else {
next({err:'unauthorizedSession',sid:socket.session.id,event:event}); // Block
}
});
}
);
//Miel艖tt 谩tad贸dik a socket.emit-re itt lehet vizsg谩lni dolgokat
scServer.addMiddleware(scServer.MIDDLEWARE_EMIT,
function (socket, event, data, next) {
log.debug('MIDDLEWARE_EMIT:'+event+JSON.stringify(data));
if (event == 'auth'){
//use unauthorized emits
log.debug('Enable AUTH event');
next();
}else{
//authorize required
socket.session.get('isUserAuthorized', function (err, value) {
if (err){
log.warn('Session error:'+JSON.stringify(err));
}
if (value) {
log.debug('Session authorized, enable '+event+' event');
next();// Allow
} else {
log.debug('MIDDLEWARE_EMIT'+JSON.stringify({err:'unauthorizedSession',sid:socket.session.id,event:event}));
next({err:'unauthorizedSession',sid:socket.session.id,event:event}); // Block
}
});
}
}
);
scServer.on('connection', function (socket) {
var doLog = new Object({
clientIp:socket.clientAddress,
socketId:socket.id,
clientSessionId:socket.ssid,
cookie:socket.cookie,
header:socket.request.headers
});
log.info('Connected:'+JSON.stringify(doLog));
socket.on('auth',function(data,res){
log.debug('Auth:'+JSON.stringify(data));
if (data.username && data.password && data.roomid){
var token = 'TOKEN123456';
res.end({status:'success',token:token});
log.debug('Set session auth to '+socket.session.id+', token:'+token);
socket.session.set('isUserAuthorized', true, function(err){
if (err){
log.warn('Session error:'+JSON.stringify(err));
}
});
activeSessions[socket.session.id] = socket.session;
}else{
res.end({status:'failed'});
}
});
socket.on('ping', function (data,req) {
//req.end();
count++;
log.debug('PING'+JSON.stringify(data));
scServer.global.publish('pong', count);
});
});
scServer.on('sessionend', function (ssid) {
delete activeSessions[ssid];
});
setInterval(function () {
/*
Emit a 'rand' event on each active session.
Note that in this case the random number emitted will be the same across all sockets which
belong to the same session (I.e. All open tabs within the same browser).
*/
for (var i in activeSessions) {
activeSessions[i].emit('rand', {rand: Math.floor(Math.random() * 100)});
}
}, 1000);
};
Server log:
vargab@vargab-laptop:~/munka/webdav/nodeserver$ node server.js
[Busy] Launching SocketCluster
Store PID: 7096
[2014-11-13 08:28:14.924] [INFO] SCW_7099 - >> Worker PID: 7099
Balancer PID: 7109
[Active] SocketCluster started
Port: 8000
Master PID: 7093
Balancer count: 1
Worker count: 1
Store count: 1
[2014-11-13 08:28:16.410] [DEBUG] SCW_7099 - Handshake
[2014-11-13 08:28:16.523] [DEBUG] SCW_7099 - MIDDLEWARE_EMIT:auth{"username":"anonymus","password":"secret","roomid":"123456789"}
[2014-11-13 08:28:16.523] [DEBUG] SCW_7099 - Enable AUTH event
[2014-11-13 08:28:21.968] [DEBUG] SCW_7099 - Handshake
[2014-11-13 08:28:22.444] [INFO] SCW_7099 - Connected:{"clientIp":"127.0.0.1","socketId":"_w0_8000_0_gu1LzinLIZxbJqMbAAAB","clientSessionId":"_w0_8000_0_EUFeHXRWgRgwBQeHAAAA","cookie":{"n/app/io":"_w0_8000_0_vVoA-uKPs3w_llLbAAAA","ga":"GA1.1.366504261.1415259035","n/app/ssid":"w0_8000_0_EUFeHXRWgRgwBQeHAAAA"},"header":{"host":"nodeserver:8000","user-agent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:33.0) Gecko/20100101 Firefox/33.0 FirePHP/0.7.4","accept":"text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8","accept-language":"hu-hu,hu;q=0.8,en-US;q=0.5,en;q=0.3","accept-encoding":"gzip, deflate","dnt":"1","referer":"http://nodeserver:8000/","cookie":"n/app/io=_w0_8000_0_vVoA-uKPs3w_llLbAAAA; _ga=GA1.1.366504261.1415259035; n/app/ssid=_w0_8000_0_EUFeHXRWgRgwBQeHAAAA","x-insight":"activate","connection":"close","x-forwarded-for":"127.0.0.1","x-forwarded-port":"8000","x-forwarded-proto":"http"}}
[2014-11-13 08:28:22.515] [DEBUG] SCW_7099 - MIDDLEWARE_EMIT:auth{"username":"anonymus","password":"secret","roomid":"123456789"}
[2014-11-13 08:28:22.515] [DEBUG] SCW_7099 - Enable AUTH event
[2014-11-13 08:28:22.515] [DEBUG] SCW_7099 - Auth:{"username":"anonymus","password":"secret","roomid":"123456789"}
[2014-11-13 08:28:22.515] [DEBUG] SCW_7099 - Set session auth to _w0_8000_0_EUFeHXRWgRgwBQeHAAAA, token:TOKEN123456
[2014-11-13 08:28:31.967] [DEBUG] SCW_7099 - MIDDLEWARE_EMIT:ping{"token":"TOKEN123456","sid":"_w0_8000_0_EUFeHXRWgRgwBQeHAAAA","channel":"123456789"}
[2014-11-13 08:28:31.969] [DEBUG] SCW_7099 - Session authorized, enable ping event
[2014-11-13 08:28:31.970] [DEBUG] SCW_7099 - PING{"token":"TOKEN123456","sid":"_w0_8000_0_EUFeHXRWgRgwBQeHAAAA","channel":"123456789"}
[2014-11-13 08:28:41.973] [DEBUG] SCW_7099 - MIDDLEWARE_EMIT:ping{"token":"TOKEN123456","sid":"_w0_8000_0_EUFeHXRWgRgwBQeHAAAA","channel":"123456789"}
[2014-11-13 08:28:41.974] [DEBUG] SCW_7099 - Session authorized, enable ping event
[2014-11-13 08:28:41.974] [DEBUG] SCW_7099 - PING{"token":"TOKEN123456","sid":"_w0_8000_0_EUFeHXRWgRgwBQeHAAAA","channel":"123456789"}
[2014-11-13 08:28:51.968] [DEBUG] SCW_7099 - MIDDLEWARE_EMIT:ping{"token":"TOKEN123456","sid":"_w0_8000_0_EUFeHXRWgRgwBQeHAAAA","channel":"123456789"}
[2014-11-13 08:28:51.969] [DEBUG] SCW_7099 - Session authorized, enable ping event
[2014-11-13 08:28:51.969] [DEBUG] SCW_7099 - PING{"token":"TOKEN123456","sid":"_w0_8000_0_EUFeHXRWgRgwBQeHAAAA","channel":"123456789"}
[2014-11-13 08:29:01.973] [DEBUG] SCW_7099 - MIDDLEWARE_EMIT:ping{"token":"TOKEN123456","sid":"_w0_8000_0_EUFeHXRWgRgwBQeHAAAA","channel":"123456789"}
[2014-11-13 08:29:01.974] [DEBUG] SCW_7099 - Session authorized, enable ping event
[2014-11-13 08:29:01.974] [DEBUG] SCW_7099 - PING{"token":"TOKEN123456","sid":"_w0_8000_0_EUFeHXRWgRgwBQeHAAAA","channel":"123456789"}
[2014-11-13 08:29:11.972] [DEBUG] SCW_7099 - MIDDLEWARE_EMIT:ping{"token":"TOKEN123456","sid":"_w0_8000_0_EUFeHXRWgRgwBQeHAAAA","channel":"123456789"}
[2014-11-13 08:29:11.973] [DEBUG] SCW_7099 - Session authorized, enable ping event
[2014-11-13 08:29:11.973] [DEBUG] SCW_7099 - PING{"token":"TOKEN123456","sid":"_w0_8000_0_EUFeHXRWgRgwBQeHAAAA","channel":"123456789"}
[2014-11-13 08:29:21.968] [DEBUG] SCW_7099 - MIDDLEWARE_EMIT:ping{"token":"TOKEN123456","sid":"_w0_8000_0_EUFeHXRWgRgwBQeHAAAA","channel":"123456789"}
[2014-11-13 08:29:21.969] [DEBUG] SCW_7099 - Session authorized, enable ping event
[2014-11-13 08:29:21.969] [DEBUG] SCW_7099 - PING{"token":"TOKEN123456","sid":"_w0_8000_0_EUFeHXRWgRgwBQeHAAAA","channel":"123456789"}
[2014-11-13 08:29:31.967] [DEBUG] SCW_7099 - MIDDLEWARE_EMIT:ping{"token":"TOKEN123456","sid":"_w0_8000_0_EUFeHXRWgRgwBQeHAAAA","channel":"123456789"}
[2014-11-13 08:29:31.970] [DEBUG] SCW_7099 - Session authorized, enable ping event
[2014-11-13 08:29:31.970] [DEBUG] SCW_7099 - PING{"token":"TOKEN123456","sid":"_w0_8000_0_EUFeHXRWgRgwBQeHAAAA","channel":"123456789"}
[2014-11-13 08:29:41.971] [DEBUG] SCW_7099 - MIDDLEWARE_EMIT:ping{"token":"TOKEN123456","sid":"_w0_8000_0_EUFeHXRWgRgwBQeHAAAA","channel":"123456789"}
[2014-11-13 08:29:41.973] [DEBUG] SCW_7099 - Session authorized, enable ping event
[2014-11-13 08:29:41.974] [DEBUG] SCW_7099 - PING{"token":"TOKEN123456","sid":"_w0_8000_0_EUFeHXRWgRgwBQeHAAAA","channel":"123456789"}
[2014-11-13 08:29:51.967] [DEBUG] SCW_7099 - MIDDLEWARE_EMIT:ping{"token":"TOKEN123456","sid":"_w0_8000_0_EUFeHXRWgRgwBQeHAAAA","channel":"123456789"}
[2014-11-13 08:29:51.980] [DEBUG] SCW_7099 - Session authorized, enable ping event
[2014-11-13 08:29:51.980] [DEBUG] SCW_7099 - PING{"token":"TOKEN123456","sid":"_w0_8000_0_EUFeHXRWgRgwBQeHAAAA","channel":"123456789"}