Разъединение сокета от узла

Как мне найти сокет, который связан с моей сессией? У меня есть сеанс в событии "авторизация" на моей стороне сервера node.js js. Теперь я хочу отключить сокет в своем запросе на выход из системы, но он не работает для меня. Это мой код

var express = require('express'),
    redis = require('redis'),
    RedisStore = require('connect-redis')(express),
    store = new RedisStore({ host: '127.0.0.1', port: 6379 }),
    parseCookie = express.cookieParser(secretkey);

var app = express();
var server = require("http").createServer(app),
    io = require("socket.io").listen(server, { log: false }),

app.use(express.cookieParser());
app.use(express.session({ secret: secretkey, key: 'express.sid', store: store, cookie: { maxAge: 3600000 } })); 
app.use(express.methodOverride());

io.set('authorization', function (handshakeData, callback) {
    if (handshakeData.headers.cookie) {
        parseCookie(handshakeData, null, function(err) {
            handshakeData.sessionID = handshakeData.signedCookies['express.sid'];
            //or if you don't have signed cookies
            //handshakeData.sessionID = handshakeData.cookies['express.sid'];

            console.log('manish in parseCookie 2 ' + handshakeData.sessionID + ', ' + ioClient);
            store.get(handshakeData.sessionID, function (err, session) {
                console.log('getting result ' + err + ', ' + session);
                if (err || !session) {
                    // if we cannot grab a session, turn down the connection
                    callback('Session not found.', false);
                } else {
                    //console.log('getting connection ' + session);
                    // save the session data and accept the connection
                    handshakeData.session = session;
                    callback(null, true);
                }
            });
        });
    } else {
        return callback('No cookie transmitted.', false);
    } 
    //callback(null, true);
});

io.sockets.on('connection', function(socket) {
    console.log('A socket with sessionID ' + socket.handshake.sessionID + ' connected!');
    socket.on('disconnect', function() {
        console.log('socket.on.disconnect ' + socket.handshake.sessionID); 
    });
    socket.on('error', function(err) {
        if(err === 'handshake error') {
            console.log('handshake error', err);
        } else {
            console.log('io error', err);
        }
    });     

    socket.on('message', function(data) { 
        console.log('messege received on server is "' + data + '"');
    });

});

Теперь, когда пользователь нажимает кнопку выхода, я хочу отключить сокет от этого метода;

app.post('/logout', function (req, res) {
    try {
        //here is my database logic
       //And here I want to disconnect socket, 
       io.sockets.socket(req.session.id).disconnect();
    }
    catch (err) { nodeUtil.errorLog2(res, 'trycatch', 6, err, 'app.js', 'logout'); }
});

Это не вызывает ни ошибки, ни перехода в событие socket.on ("отключено"). Так как мне это сделать?

1 ответ

Хм.. попробуйте это

io.sockets.socket(socket.id).emit('disconnect')
Другие вопросы по тегам