// Dependencies
var express = require('express') //express@2.5.11
, connect = require('express/node_modules/connect')
, sessionStore = new connect.middleware.session.MemoryStore()
, io = require('socket.io') // socket.io@0.9.6
, routes = require('./routes');
var app = module.exports = express.createServer();
// Configuration
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({
secret: 'your secret here'
, key: 'express.sid'
, store: sessionStore
}));
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function(){
app.use(express.errorHandler());
});
// Routes
app.get('/', routes.index);
app.listen(3000, function(){
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
});
// Sockets
var sio = io.listen(app)
sio.set('authorization', function (data, accept) {
if (!data.headers.cookie)
return accept('No cookie transmitted.', false);
data.cookie = connect.utils.parseCookie(data.headers.cookie);
data.sessionID = data.cookie['express.sid'];
data.sessionStore = sessionStore;
sessionStore.get(data.sessionID, function (err, session) {
if (err || !session) {
accept('Error: No such session', false);
} else {
data.session = new connect.middleware.session.Session(data, session);
accept(null, true);
}
});
});
sio.sockets.on('connection', function (socket) {
var hs = socket.handshake;
var session = hs.session;
console.log('A socket with sessionID ' + hs.sessionID + ' connected!');
var intervalID = setInterval(function () {
hs.session.reload( function () {
hs.session.touch().save();
});
}, 60 * 1000);
socket.on('setVal', function(data){
session.val = data.value;
session.save();
console.log('changeVal:' + data.value);
});
socket.on('getVal', function(){
console.log('getVal:' + session.val);
socket.emit('response', session.val)
});
socket.on('disconnect', function () {
console.log('A socket with sessionID ' + hs.sessionID + ' disconnected!');
clearInterval(intervalID);
});
});
<script>
var socket = io.connect('/');
socket.emit('setVal', { value: 'test' });
socket.emit('getVal');
socket.on('response', function(data){
console.log(data);
})
</script>
Kaynak: http://www.danielbaulig.de/socket-ioexpress