Socket.io: Client.disconnect () para obligar a un cliente a desconectarse

Creado en 8 sept. 2010  ·  24Comentarios  ·  Fuente: socketio/socket.io

Sería genial tener un método de desconexión () en las instancias del Cliente. Esto es útil para implementar mecanismos como el kick / ban de IRC. Básicamente, debe haber una forma de deshacerse de los abusadores.

Comentario más útil

el socket.disconnect(); no parece funcionar correctamente, ciertamente desencadena el evento de desconexión, pero no cierra literalmente la conexión. ¿Hay algún error o se espera este comportamiento?

Todos 24 comentarios

Podría ser interesante discutir si vale la pena implementarlo (aunque sería de baja prioridad). Sin embargo, IRC kick / ban es un ejemplo de dónde no usaría tal funcionalidad. En esos escenarios, se desea mantener al cliente conectado y solo evitar la transmisión de mensajes de un canal específico.

Encontré esto al considerar un método similar.

Me gustaría una forma de decirle a un cliente de manera explícita y clara que se desconecta por motivos de política, no por motivos de transporte. Por ejemplo, error de autorización. De esta manera, el cliente sabe que la conexión se estableció pero se desconectó a instancias del host y no necesita probar los transportes de respaldo.

¡Gracias!

De hecho, esto sería muy útil.

¿Es client.connection.destroy () una forma legítima de desconectar a un cliente?

más1. Me encantaría tener una forma de desconectar limpiamente a un cliente. :)

cliente._onDisconnect (); o
socket.clients [kickedUserSocketId] ._ onDisconnect ();

parece hacer el truco.

NOTA: Hay un guión bajo antes de "onDisconnect", simplemente no se muestra en esta rebaja.

También vi a alguien hacerlo así (aunque no lo he probado yo mismo):
socket.clients [kickedClientId] .send ({evento: 'desconectar'});
socket.clients [kickedClientId] .connection.end ();

¿Está implementado ahora, o debería usar el método -?

socket.clients [kickedClientId] .send ({evento: 'desconectar'});
socket.clients [kickedClientId] .connection.end ();

¿Cuál es la forma "oficial" de hacer esto ????

Vuelva a abrir para que sepamos cuál es la forma oficial.

Todavía no hay una solución para esto, vuelva a abrir para realizar un seguimiento del progreso.

Acabo de descubrir este código en client / socket.js:

/**
 * Kicks client
 *
 * <strong i="6">@api</strong> public
 */

Socket.prototype.disconnect = function () {
  if (!this.disconnected) {
    this.log.info('booting client');

    if ('' === this.namespace.name) {
      if (this.manager.transports[this.id] && this.manager.transports[this.id].open) {
        this.manager.transports[this.id].onForcedDisconnect();
      } else {
        this.manager.onClientDisconnect(this.id);
        this.manager.store.publish('disconnect:' + this.id);
      }
    } else {
      this.packet({type: 'disconnect'});
      this.manager.onLeave(this.id, this.namespace.name);
      this.$emit('disconnect', 'booted');
    }

  }

  return this;
};

Lo probé ( socket.disconnect() ) y funciona bien. Parece que este código existe desde mediados de 2011 y nadie nos lo dijo.

Consulte también el número 795.

el socket.disconnect(); no parece funcionar correctamente, ciertamente desencadena el evento de desconexión, pero no cierra literalmente la conexión. ¿Hay algún error o se espera este comportamiento?

@geniousphp tengo el mismo problema

Entonces, ¿por qué el problema está cerrado, está resuelto? ¿si es así, cómo? Cual es la conclusion?

No sé por qué está cerrado, no me funciona y todavía uso la forma fea de forzar la desconexión.

Tratar,
socket.manager.onClientDisconnect (socket.id);

Creo que eso es lo que quiero. increíble.

Desafortunadamente @acidhax, su método ya no funciona desde la versión 1.0.

¿Hay alguna manera de actualizar 0.9.16 a 1.XX sin problemas, chicos?

+1

El mismo barco aquí. Esto es realmente importante para las pruebas, ya que desea aislar las pruebas entre sí.

    try {
        IO.Options opts = new IO.Options();
        opts.forceNew = true;
        opts.timeout = -1;
        socket1 = IO.socket(c.ip, opts);
        socket1.on("res", getdataListener);
        socket1.connect();
                socket1.on(com.github.nkzawa.socketio.client.Socket.EVENT_CONNECT,
                new Emitter.Listener() {

                    <strong i="5">@Override</strong>
                    public void call(Object... args) {

                        Logger.print("CONNECTED...............");

                        Message msg = new Message();
                        msg.what = ResponseCodes.CreateQueueResp;
                        Login.handler.sendMessage(msg);

                        activity.runOnUiThread(new Runnable() {

                            <strong i="6">@Override</strong>
                            public void run() {
                                // TODO Auto-generated method stub

                                startChecking();
                                startIdleChecking();

                            }

                        }); 
                    }

                })
                .on(com.github.nkzawa.socketio.client.Socket.EVENT_RECONNECT,
                        new Emitter.Listener() {

                            <strong i="7">@Override</strong>
                            public void call(Object... arg0) {


                                System.out
                                        .println("............... EVENT_RECONNECT");

                                // TODO Auto-generated method stub

                            }
                        })
                .on(com.github.nkzawa.socketio.client.Socket.EVENT_CONNECT_ERROR,
                        new Emitter.Listener() {

                            <strong i="8">@Override</strong>
                            public void call(Object... args) {

                                System.out
                                        .println("............... EVENT_CONNECT_ERROR");

                            }

                        })
                .on(com.github.nkzawa.socketio.client.Socket.EVENT_CONNECT_TIMEOUT,
                        new Emitter.Listener() {

                            <strong i="9">@Override</strong>
                            public void call(Object... args) {

                                System.out
                                        .println("............... EVENT_CONNECT_TIMEOUT");

                            }

                            // this is the emit from the server
                        })

                .on(Socket.EVENT_ERROR, new Emitter.Listener() {

                    <strong i="10">@Override</strong>
                    public void call(Object... args) {

                        System.out
                                .println("......................... EVENT_ERROR");

                    }

                    // this is the emit from the server

                })
                .on(com.github.nkzawa.socketio.client.Socket.EVENT_DISCONNECT,
                        new Emitter.Listener() {

                            <strong i="11">@Override</strong>
                            public void call(Object... args) {

                                Logger.print(".............EVENT_DISCONNECT");


                                if (!open) {

                                    //server_message = getResources().getString(R.string.It_seems_that);


                                    server_message="It seems that connection to server have been Lost.Please reconnect!"; 

                                    ServerError error = new ServerError(activity, server_message);


                                }

                            }

                        });

    } catch (Exception e) {

        e.printStackTrace();

    }

Mi aplicación de función se activa repetidamente cuando el dispositivo recibe el mensaje. Cada vez que se abrió la conexión del socket de la aplicación de función Cómo cerrar la conexión abierta a la fuerza.
Aquí está mi lógica:
'uso estricto';
var _test = require ('socket.io-client');
var socket = _test.connect ('http://XXXXXXXXXX.net/');
export.handler = function (evento, contexto) {
var ResultMessage = JSON.stringify (event.message, null, 2);
si (! enchufe.conectado)
{
socket.emit ('agregar usuario', '1542');
}
socket.emit ('mensaje nuevo', "[" + ResultMessage + "]");

};
Gracias,
Por adelantado.

¿Fue útil esta página
0 / 5 - 0 calificaciones