Было бы здорово иметь метод Disconnect () для экземпляров Client. Это полезно для реализации таких механизмов, как кик / бан IRC. По сути, должен быть способ избавиться от насильников.
Было бы интересно обсудить, стоит ли его внедрять (хотя это было бы низким приоритетом). Тем не менее, 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 + "]");
};
Спасибо,
Заранее.
Самый полезный комментарий
socket.disconnect();
, похоже, не работает правильно, конечно, он запускает событие отключения, но он не закрывает соединение буквально. Есть ли ошибка или такое поведение ожидается?