Skip to content

Commit

Permalink
Merge pull request #22 from lovebear/gofast
Browse files Browse the repository at this point in the history
module slow, speed it up
  • Loading branch information
inspectocat committed Apr 26, 2013
2 parents 5ef3401 + d9c18d9 commit 8f55f0c
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 13 deletions.
50 changes: 50 additions & 0 deletions bench/bench.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
var count = 1e7;

var SessionSocket = require('../session.socket.io');
var EventEmitter = require('events').EventEmitter;

// stubs
var io = { sockets: new EventEmitter() };
var sessionStore = {
load: function(cookie, fn) {
fn(undefined, {test: 'hi'})
}
}
var cookieParser = function(handshake, idk, fn) {
fn();
}
var stubsocket = {
handshake: {
secureCookies: '123'
}
}
//
var s = new SessionSocket(io, sessionStore, cookieParser, 'key');
var type, startTime, d = 0;

function run() {
startTime = process.hrtime();
for (var i = 0; i < count; i++) {
io.sockets.emit('connection', stubsocket);
}
}

function done() {
var elapsed = process.hrtime(startTime);
var time = elapsed[0] + elapsed[1] / 1e9;
var opcount = count / time;
console.log('op/s: ', Math.round(opcount), ' | time: ', time);
}

if (process.argv[2] === 'session') {
type = s;
} else {
type = io.sockets;
}

type.on('connection', function() {
d++;
if (d === count) done();
})

run();
27 changes: 14 additions & 13 deletions session.socket.io.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,30 +3,32 @@ module.exports = SessionSockets;
function SessionSockets(io, sessionStore, cookieParser, key) {
key = key || 'connect.sid';

var self = this;

this.of = function(namespace) {
return {
on: function(event, callback) {
return bind.call(this, event, callback, io.of(namespace));
}.bind(this)
return bind(self.getSession, event, callback, io.of(namespace));
}
};
};

this.on = function(event, callback) {
return bind.call(this, event, callback, io.sockets);
return bind(self.getSession, event, callback, io.sockets);
};

function bind(event, callback, namespace) {
namespace.on(event, function (socket) {
this.getSession(socket, function (err, session) {
function bind(getsession, event, callback, namespace) {
namespace.on(event, function(socket) {
getsession(socket, function (err, session) {
callback(err, socket, session);
});
}.bind(this));
});
}

this.getSession = function(socket, callback) {
cookieParser(socket.handshake, {}, function (parseErr) {
sessionStore.load(findCookie(socket.handshake), function (storeErr, session) {
var err = resolve(parseErr, storeErr, session);
var err = resolveErr(parseErr, storeErr, session);
callback(err, session);
});
});
Expand All @@ -38,10 +40,9 @@ function SessionSockets(io, sessionStore, cookieParser, key) {
|| (handshake.cookies && handshake.cookies[key]);
}

function resolve(parseErr, storeErr, session) {
if (parseErr) return parseErr;
if (storeErr) return storeErr;
if (!session) return new Error('Could not lookup session by key: ' + key);
return null;
function resolveErr(parseErr, storeErr, session) {
var err = parseErr || storeErr || null;
if (!err && !session) err = new Error('Could not lookup session by key: ' + key);
return err;
}
}

0 comments on commit 8f55f0c

Please sign in to comment.