Seria ótimo ter um método disconnect () nas instâncias do cliente. Isso é útil para implementar mecanismos como kick / ban do IRC. Basicamente, deve haver uma maneira de se livrar dos agressores.
Pode ser interessante discutir se vale a pena implementar (embora seja de baixa prioridade). No entanto, IRC kick / ban é um exemplo de onde eu não usaria tal funcionalidade. Nesses cenários, deseja-se manter o cliente conectado, e apenas evitar a transmissão de mensagens de um canal específico.
Achei isso ao ponderar um método semelhante.
Gostaria de uma maneira de informar de forma explícita e clara a um cliente que ele está sendo desconectado por motivos de política, não por motivos de transporte. Por exemplo, falha de autorização. Dessa forma, o cliente sabe que a conexão foi estabelecida, mas foi desconectada por ordem do host e não precisa tentar transportes de fallback.
Obrigado!
Isso seria realmente muito útil.
Client.connection.destroy () é uma maneira legítima de desconectar um cliente?
plus1. Adoraria ter uma maneira de desconectar um cliente de maneira limpa. :)
client._onDisconnect (); ou
socket.clients [kickedUserSocketId] ._ onDisconnect ();
parecem fazer o truque.
NOTA: Há um sublinhado antes de "onDisconnect", ele simplesmente não renderiza nesta marcação.
Também vi alguém fazer assim (embora não tenha testado):
socket.clients [kickedClientId] .send ({evento: 'desconectar'});
socket.clients [kickedClientId] .connection.end ();
Isso está implementado agora ou devo usar o método -
socket.clients [kickedClientId] .send ({evento: 'desconectar'});
socket.clients [kickedClientId] .connection.end ();
Qual é a forma "oficial" de fazer isso ????
Por favor, reabra para que possamos descobrir qual é a forma oficial.
Ainda não há solução para isso, reabra para acompanhar o andamento.
Acabei de descobrir este código em 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;
};
Eu tentei ( socket.disconnect()
) e funciona bem. Parece que esse código existe desde meados de 2011 e ninguém nos informou.
Consulte também a edição nº 795.
o socket.disconnect();
não parece funcionar corretamente, certamente ele dispara o evento de desconexão, mas não fecha literalmente a conexão. Existe um bug ou esse comportamento é esperado?
@geniousphp estou tendo o mesmo problema
Então, por que o problema foi encerrado, ele foi resolvido? se sim como? Qual é a conclusão?
Não sei por que está fechado, não funciona para mim e ainda uso o jeito feio de forçar a desconexão.
Experimente,
socket.manager.onClientDisconnect (socket.id);
Acho que é isso que eu quero. incrível.
Infelizmente @acidhax seu método não funciona mais desde o lançamento 1.0
Existe alguma maneira de atualizar o 0.9.16 para o 1.XX sem problemas, pessoal?
+1
O mesmo barco aqui. Isso é muito importante para o teste, pois você deseja isolar os testes uns dos outros.
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();
}
Meu aplicativo de função é acionado repetidamente quando o dispositivo recebe a mensagem. Toda vez que minha conexão de soquete de aplicativo de função é aberta.Como fechar a conexão aberta à força.
Aqui está a minha lógica:
'use estrito';
var _test = require ('socket.io-client');
var socket = _test.connect ('http://XXXXXXXXXX.net/');
exportações.handler = função (evento, contexto) {
var ResultMessage = JSON.stringify (event.message, null, 2);
if (! socket.connected)
{
socket.emit ('adicionar usuário', '1542');
}
socket.emit ('nova mensagem', "[" + ResultMessage + "]");
};
Obrigado,
Antecipadamente.
Comentários muito úteis
o
socket.disconnect();
não parece funcionar corretamente, certamente ele dispara o evento de desconexão, mas não fecha literalmente a conexão. Existe um bug ou esse comportamento é esperado?