Como reconectar após ligar para .disconnect ()

Questão Como você reconecta um cliente ao servidor depois de emitir um manual.disconnect()?

No meu projeto atual, preciso desconectar um cliente do servidor quando o usuário sair da sessão. Eu fiz umsocket.disconnect() para fazer a desconexão com sucesso. O servidor removeu o usuário da sessão.

Depois de algum tempo, o usuário decidiu fazer login novamente, mas o socket.io se recusa a se conecta

Estou claro que o Socket.IO implementou o algoritmo de reconexão, mas claramente esse é um caso diferent

Abaixo é o pedaço de código onde eu faço a conexão. No segundo gatilho desse bloco de código, o objetosocket foi criado, mas nãoconnect foi disparado deste objeto.

//Start the socket
var socket = io.connect(SOCKET_IO_URL);
socket.on('connect', function() {
    me.fireEvent('connect');
    socket.emit('register', {
        hashed_identifier: hashed_identifier,
        account_id: account_id
    });
});

socket.on('ready', function() {
    me.ready = true;
    me.log('Handshake done. Listening for new data');
});

socket.on('data', function(data) {
    me.fireEvent('data', data);
    //Tells server we received it
    socket.emit('data', {ack: 1});
});

socket.on('disconnect', function() {
    me.fireEvent('disconnect');
});

UPDATE: Conforme solicitado por @ Tony

Na verdade, tudo está incluído no Sencha Touch 2.0, mas acredito que não há nada a ver com o ST2.0

Esta é a minha classe de dados. O uso dessa classe é que, quando o usuário efetuou login, essa classe será inicializada. E após o logout do usuário, o sistema chamará odisconnect() método nesta classe.

Quando o usuário faz login novamente, essa classe é inicializada novamente, mas engraçado é que o soquete de alguma forma retinha todos os eventos e sessões anteriores que tinha anteriorment

/**
* Serve as interface to wait for data communication in between server and client
*/
Ext.define('go.module.connect.Data', {

    mixins: {
        observable: 'Ext.mixin.Observable'
    },

    config: {
        account: null
    },

    ready: false,

    socket: null,

    constructor: function(cfg) {
        var me = this,
            hashed_identifier = Sha1.hash(go.__identifier);


        me.initConfig(cfg);

        var account_id = me.getAccount().get('id');

        //Start the socket
        var socket = io.connect(SOCKET_IO_URL);
        socket.on('connect', function() {
            console.log('connect');
            me.fireEvent('connect');
            socket.emit('register', {
                hashed_identifier:hashed_identifier,
                account_id: account_id
            });
        });

        socket.on('ready', function() {
            me.ready = true;
            me.log('Handshake done. Listening for new data');
        });

        socket.on('data', function(data) {
            me.fireEvent('data', data);
            //Tells server we received it
            socket.emit('data', {ack: 1});
        });

        socket.on('disconnect', function() {
            me.fireEvent('disconnect');
        });

        console.log(socket);
        if (!socket.socket.connected){
            socket.socket.reconnect();
        }


        me.socket = socket;


        me.callParent([cfg]);
    },

    disconnect: function() {
        this.socket.disconnect();
        this.socket.removeAllListeners();
        this.socket.socket.removeAllListeners();
    },

    log: function(msg) {
        console.log('@@ Connect: '+msg);
    }
});

E abaixo estão os resultados do meu console.log:

E abaixo está a minha janela de depuração node.js

Creio que a causa raiz desse cenário engraçado é que o @ anexado anteriormenconnect ouvinte de evento não é removido completamente. Como devo removê-lo? Devo usaronce? ou devo especificar a função de ouvinte também. Eu penseiremoveAllListeners() é suficiente para esta tarefa.

questionAnswers(10)

yourAnswerToTheQuestion