Existe alguma maneira de desconectar um cliente com SocketIO e literalmente fechar a conexão? Portanto, se alguém estiver conectado ao meu servidor e eu quiser encerrar a conexão entre essa pessoa e meu servidor, como devo proceder para fazer isso?
117
iptables
), mais recursos você economizará. Na maioria dos casos, simplesmente chutar o cliente deve ser suficiente, já que o socketio não se conecta tão rapidamente, e se alguém realmente quiser fazer DoS você, eles têm outras maneiras de qualquer maneira (por exemplo, baixando páginas de você).socket.disconnect()
pode ser usado apenas no lado do cliente, não no lado do servidor.Client.emit('disconnect')
dispara o evento de desconexão no servidor, mas não desconecta efetivamente o cliente. O cliente não está ciente da desconexão.Portanto, a questão permanece: como forçar um cliente a se desconectar do servidor?
fonte
Client.emit('disconnect')
mais chamar manualmente com as versões recentes de socket.io, agora existe um servidorsocket.disconnect()
(veja minha resposta).socket.disconnect()
pode ser usado no lado do servidor.disconnect()
função for concluída?Alguma razão pela qual você não pode fazer com que o servidor emita uma mensagem ao cliente que o faça chamar a função de desconexão?
No cliente:
No servidor:
fonte
Assumindo o soquete nomeado do seu soquete, use:
fonte
Para quem encontrou isso no google - existe uma solução para isso agora:
Socket.disconnect()
chuta o cliente (lado do servidor). Sem chance para o cliente ficar conectado :)fonte
disconnect
evento do soquete para descobrir se ele foi desconectado. Também pode ser oclose
evento, não tenho certeza. Consulte a documentação do socket.io para obter mais informações sobre isso.Verificando esta manhã, parece que agora é:
https://socket.io/docs/client-api/#socket-close
fonte
No meu caso, eu queria derrubar a conexão subjacente, caso em que tive que ligar,
socket.disconnect(true)
como você pode ver, é necessário da fonte aquifonte
client._onDisconnect()
Deveria trabalharfonte
Socket.io usa o padrão EventEmitter para desconectar / conectar / verificar os batimentos cardíacos para que você possa fazer isso.
Client.emit('disconnect');
fonte
Isso não funcionou para mim:
Isso funcionou para mim:
A transferência
true
fechará a conexão subjacente com o cliente e não apenas o namespace que o cliente está conectado à documentação do Socket IO .Um exemplo de caso de uso: o cliente se conectou ao servidor de soquete da web com token de acesso inválido (token de acesso entregue ao servidor de soquete da web com parâmetros de conexão). O servidor de soquete da Web notifica o cliente de que fechará a conexão por causa de seu token de acesso inválido:
fonte
Estou usando
client.emit('disconnect')
+client.removeAllListeners()
para cliente conectado para ignorar todos os eventos após desconectarfonte
Estou usando no lado do cliente
socket.disconnect();
fonte
usar :
não use :
fonte
Você pode fazer
socket = undefined
apagar qual soquete você conectou. Então quando quiser conectar faça socket (url)Então vai ficar assim
fonte
Adicione novas conexões de soquete a uma matriz e, quando quiser fechar todas, faça um loop através delas e desconecte. (lado do servidor)
fonte