Добрый день.
Давно хотел познакомиться с возможностями Web Socket. Собственно для этого и было решено написать простой чат. В качестве фреймворка используется express, в качестве библиотеки для Web Socket - sock.js. И получается вот такой код:
var YAML = require('yamljs');
var conf = YAML.load('config.yml');
var conf = conf['express'];
var express = require('express')
, routes = require('./routes')
, start = require('./routes/start')
, user = require('./routes/user')
, http = require('http')
, path = require('path')
, sockjs = require('sockjs')
var app = express();
app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + conf['view']['dir']);
app.set('view engine', conf['view']['engine']);
app.use(express.favicon());
app.use(express.logger(conf['logger']['name']));
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({
cookie: conf['session']['cookie'],
secret: conf['session']['secret']
}));
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
});
app.get('/', routes.index); // Главная страница. Содержит форму для ввода имени пользователя
app.get('/users', user.add); // Содержит обработчик для формы на главной странице.
app.get('/start', start.start); // Страница на которой размещается чат
var server = http.createServer(app);
var echo = sockjs.createServer();
var connList = new Array();
echo.on('connection', function (conn) {
connList.push({connaction: conn})
conn.on('data', function (message) {
connList.forEach(function (thisConnaction){
thisConnaction.write(message);
});
});
conn.on('close', function () { });
});
echo.installHandlers(server, {prefix:'/echo'});
server.listen(app.get('port'), function(){
console.log("Express server listening on port " + app.get('port'));
});
Код не сильно отличается от примеров. Как видно на сайте 3 страницы:
'/' - Главная страница. На ней размещена форма для ввода пользователем своего имени.
'/users' - Обрабатывает данные формы. В случае если имя занято перенаправляет обратно на главную или сохраняет в сессии имя пользователя и перенаправляет на '/start'.
'/start' - Собственно страница с чатом.
И вот тут у меня возникла проблема. Получить данные сессии (в данном примере имя пользователя) в обработчике Web Socket подключений у меня просто не получается.