Cómo reconectarse después de llamar a .disconnect ()

Pregunta ¿Cómo reconecta un cliente al servidor después de haber emitido un manual.disconnect()?

En mi proyecto actual, necesito desconectar un cliente del servidor cuando el usuario cierra sesión en la sesión. Hice unsocket.disconnect() para hacer la desconexión con éxito. El servidor eliminó al usuario de la sesión.

Después de un tiempo, el usuario decidió iniciar sesión nuevamente, pero socket.io se niega a conectarse.

Estoy claro que Socket.IO ha implementado el algoritmo de reconexión, pero claramente este es un caso diferente.

Abajo es el código donde hago la conexión. En el segundo disparador de este bloque de código, objetosocket fue creado, pero noconnect fue despedido de este 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: según lo solicitado por @ Tony

De hecho, todo está envuelto en Sencha Touch 2.0, pero creo que no hay nada que ver con ST2.0

Esta es mi clase de datos. El uso de esta clase es cuando el usuario inició sesión, esta clase se inicializará. Y al cerrar la sesión del usuario, el sistema llamará a ladisconnect() método en esta clase.

Cuando el usuario inicia sesión nuevamente, esta clase se inicializa nuevamente, pero es divertido que el socket retenga de alguna manera todos los eventos y sesiones anteriores que tenía anteriormente.

/**
* 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);
    }
});

Y a continuación se muestran mis resultados de console.log:

Y debajo está mi ventana de depuración de node.js

Creo que la causa raíz de este divertido escenario es que el @ adjunto previamenconnectl detector de eventos @ no se elimina completamente. ¿Cómo debo eliminarlo? ¿Debo usaronce? o debería especificar la función de escucha también. PenséremoveAllListeners() es suficiente para esta tarea.

Respuestas a la pregunta(10)

Su respuesta a la pregunta