Kod Panosu

Kopyala, Yapıştır, Hatırla, Kodla..

Node.JS: Express Session’larını Socket.IO ile Paylaşmak

// 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

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: