Как обнаружить несколько подключений socket.io от одного пользователя

Я следовал этому руководству :http://www.danielbaulig.de/socket-ioexpress/, чтобы связать express.js с socket.io, и он работает блестяще.

У меня есть пользователь, входящий в систему на одной странице (Express.js POST-запрос, который устанавливает объект сеанса ), и когда они аутентифицируются, он направляет их на новую страницу, где загружается socket.io и на сокет сервера.io может получить сеанс, который был установлен из Express. Так что все работает нормально.

Теперь у меня есть пользователи на странице, которая использует socket.io, и когда эта страница обновляется -, иногда соединение socket.io все еще существует (, т.е. он не отключается ). Что я пытаюсь сделать, так это изменить функцию io.set('authorization'), чтобы гарантировать, что когда пользователь подключается -, он отключит все существующие экземпляры socket.io, которые все еще открыты для этого клиента.

Вот как это выглядит на данный момент:

//socket.io connect to express
var parseCookie = require('connect').utils.parseCookie;
io.set('authorization', function (data, accept) {
    if (data.headers.cookie) 
    {
        data.cookie = parseCookie(data.headers.cookie);
        data.sessionID = data.cookie['express.sid'];
        // (literally) get the session data from the session store
        sessionStore.get(data.sessionID, function (err, session) 
        {
            if (err || !session) 
            {
                // if we cannot grab a session, turn down the connection
                //note: a session is created when the user logs in
                accept('Error', false);
            } 
            else 
            {
                //TODO something here before we accept the connection
                //??

                // save the session data
                data.session = session;
                //accept the connection
                accept(null, true);
            }
        });
    } 
    else 
    {
        return accept('No cookie transmitted.', false);
    }
});

Как мне проверить, есть ли у клиента, который должен быть принят, предыдущее соединение, и оно все еще открыто (и поэтому нам нужно отключить это старое соединение ).

В экспресс-сеансе есть «имя пользователя» -, поэтому мы можем получить объект сеанса и получить имя пользователя, я просто не могу понять, как просмотреть список всех клиентов socket.io и получить просмотрите экспресс-сеанс для каждого из них и проверьте, совпадает ли он с аутентификацией пользователя в данный момент.

12
задан Andrew 7 May 2012 в 23:15
поделиться