Socket.io强制断开客户端连接

11

也许我在这里做错了什么,但我无法理解这个问题。

以下内容不起作用:

客户端

$("#disconnectButton").click(function() {
  socket.emit("disconnect");
});

服务器

socket.on("disconnect", function() {
  console.log("this never gets called");
});

我可以在客户端手动调用断开连接事件吗?因为以下内容有效:

客户端

$("#disconnectButton").click(function() {
  socket.emit("whatever");
});

服务器

socket.on("whatever", function() {
  socket.disconnect();
  console.log("this gets called and disconnects the client");
});

你强制断开连接的理由是什么?如果你试图将某人踢出以违反限制或安全限制,那么你应该采取更加优雅的方式来终止连接。 - Brad
我有一个聊天应用程序,我想添加一个“断开连接”的选项 - 这样某人就可以手动从websocket断开连接(有点像复制用户按刷新的操作)。 - Tamas
2个回答

9

'disconnect' 事件是 Socket.io 的事件,如果使用 emit 调用 'disconnect' 可能会引起其他问题。

因此:

$("#disconnectButton").click(function() {
  socket.emit("disconnect");
});

替换:

$("#disconnectButton").click(function() {
  socket.disconnect();
});

1
这对我不会调用“断开连接”事件。 - nicohvi
对我有效。谢谢! - Nikola

1

目前,socket.emit('disconnect')socket.disconnect()无法正常工作。 与套接字服务器断开连接的正确语法是

socket.close()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接