Socket.io: Client.disconnect (), чтобы заставить клиента отключиться

Созданный на 8 сент. 2010  ·  24Комментарии  ·  Источник: socketio/socket.io

Было бы здорово иметь метод Disconnect () для экземпляров Client. Это полезно для реализации таких механизмов, как кик / бан IRC. По сути, должен быть способ избавиться от насильников.

Самый полезный комментарий

socket.disconnect(); , похоже, не работает правильно, конечно, он запускает событие отключения, но он не закрывает соединение буквально. Есть ли ошибка или такое поведение ожидается?

Все 24 Комментарий

Было бы интересно обсудить, стоит ли его внедрять (хотя это было бы низким приоритетом). Тем не менее, IRC-кик / бан - это пример того, где я бы не стал использовать такую ​​функциональность. В этих сценариях желательно, чтобы клиент оставался подключенным и просто предотвращал трансляцию сообщений определенного канала.

Обнаружил это, когда размышлял над подобным методом.

Мне нужен способ явно и четко сообщить клиенту, что он отключается по политическим причинам, а не по транспортным причинам. Например, ошибка авторизации. Таким образом, клиент знает, что соединение было установлено, но было отключено по просьбе хоста, и ему не нужно пробовать резервные транспорты.

Спасибо!

Это действительно было бы очень полезно.

Является ли client.connection.destroy () законным способом отключить клиента?

плюс1. Хотелось бы иметь способ чисто отключить клиента. :)

client._onDisconnect (); или
socket.clients [kickedUserSocketId] ._ onDisconnect ();

похоже, делают свое дело.

ПРИМЕЧАНИЕ. Перед «onDisconnect» стоит подчеркивание, оно просто не отображается в этой уценке.

Также видел, как кто-то делал это вот так (хотя сам не тестировал):
socket.clients [kickedClientId] .send ({событие: 'разъединить'});
socket.clients [kickedClientId] .connection.end ();

Это реализовано сейчас, или я должен использовать - метод

socket.clients [kickedClientId] .send ({событие: 'разъединить'});
socket.clients [kickedClientId] .connection.end ();

Каким "официальным" способом это сделать ????

Пожалуйста, откройте снова, чтобы мы узнали, что является официальным способом.

По-прежнему нет решения, пожалуйста, откройте, чтобы отслеживать прогресс.

Я только что обнаружил этот код в 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;
};

Я попробовал ( socket.disconnect() ), и он отлично работает. Похоже, этот код существует с середины 2011 года, и нам никто не сказал.

См. Также номер 795.

socket.disconnect(); , похоже, не работает правильно, конечно, он запускает событие отключения, но он не закрывает соединение буквально. Есть ли ошибка или такое поведение ожидается?

@geniousphp У меня такая же проблема

Так почему вопрос закрыт, решен? если да, то как? Какой вывод?

Я не знаю, почему он закрыт, у меня это не работает, и я до сих пор использую уродливый способ принудительного отключения.

Пытаться,
socket.manager.onClientDisconnect (socket.id);

Думаю, это то, что я хочу. классно.

К сожалению, @acidhax его метод больше не работает с момента выпуска 1.0.

Есть ли вообще возможность плавного обновления с 0.9.16 до 1.XX, ребята?

+1

Здесь та же лодка. Это действительно важно для тестирования, поскольку вы хотите изолировать тесты друг от друга.

    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();

    }

Мое приложение-функция запускалось повторно, когда устройство получает сообщение. Каждый раз, когда открывается соединение сокета моего приложения-функции. Как принудительно закрыть открытое соединение.
Вот моя логика:
'использовать строго';
var _test = require ('socket.io-client');
var socket = _test.connect ('http://XXXXXXXXXX.net/');
export.handler = function (событие, контекст) {
var ResultMessage = JSON.stringify (event.message, null, 2);
если (! socket.connected)
{
socket.emit ('добавить пользователя', '1542');
}
socket.emit ('новое сообщение', "[" + ResultMessage + "]");

};
Спасибо,
Заранее.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги