Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js:socket.io关闭客户端连接_Javascript_Node.js_Express_Socket.io - Fatal编程技术网

Javascript Node.js:socket.io关闭客户端连接

Javascript Node.js:socket.io关闭客户端连接,javascript,node.js,express,socket.io,Javascript,Node.js,Express,Socket.io,如何关闭客户端的套接字连接 我正在使用: socket.io 0.9 node.js 0.10.15 快报3.3.4 i、 e: 调用localhost/test --服务器端 var test = io .of('/test') .on('connection', function (socket) { console.log('open socket: ' + socket); socket.on('disconnect', function () { console

如何关闭客户端的套接字连接

我正在使用:

  • socket.io 0.9
  • node.js 0.10.15
  • 快报3.3.4
i、 e: 调用
localhost/test

--服务器端

var test = io
.of('/test')
.on('connection', function (socket) {

  console.log('open socket: ' + socket);

  socket.on('disconnect', function () {
    console.log('disconnected event');
    //socket.manager.onClientDisconnect(socket.id); --> endless loop with this disconnect event on server side
    //socket.disconnect(); --> same here
  });
});
--客户端

var socket = io.connect('http://localhost:3000/test');
socket.on('disconnect', function () {
   console.log('disconnect client event....');
});

socket.emit('getInitData', function (data) {
  .. do something with data
});
window.onbeforeunload = function(e) {
  socket.disconnect();
};
如果我加载测试页面,我需要从服务器(getInitData)获取一些值。
在第一次访问页面时,我会得到一次数据,在重新加载或第二次访问页面时,我会得到两次数据,以此类推

服务器端的连接在页面重新加载时自动关闭,如果您离开页面,则会自动关闭。
但在客户端,连接仍然打开。
如何关闭客户端的连接或检查是否已经有打开的连接

更新
我现在尝试了以下方法:(客户端)

这会在客户端触发断开连接事件,但我仍然得到两次或三次响应。

您尝试过:

socket.disconnect() 

在客户端?

服务器端和/或浏览器端没有连接。只有一个连接。如果其中一方将其关闭,则它将关闭(并且您无法将数据推送到明显关闭的连接)

现在,当您离开页面时,浏览器会关闭连接(这不取决于您在服务器端使用的库/语言/操作系统)。这至少适用于WebSocket(对于长轮询可能不适用,因为
保持活动状态
,但hopofuly socket.io可以正确处理此问题)


如果出现这样的问题,那么我很确定您自己的代码(在服务器端)中有一个bug。可能您正在堆叠一些不应该堆叠的事件处理程序。

我正在尝试关闭版本1.0中的用户连接,并找到以下方法:

socket.conn.close()

此方法与disconnect()之间的区别在于,客户端将继续尝试重新连接到服务器。

尝试此方法以关闭连接:

socket.close();
const socket = io('http://localhost', {autoConnect: false});
socket.open();// synonym to socket.connect()
如果您想再次打开它:

socket.connect();
仅重新启动客户端上的连接触发断开事件。但又重新连接了

socket.close()

断开与客户端的连接。客户端将继续尝试连接。

只需尝试
socket。通过从客户端发出任何事件,断开服务器端的连接(true)

对于socket.io版本1.4.5:

在服务器上:

socket.on('end', function (){
    socket.disconnect(0);
});
在客户端:

var io = io();
io.emit('end');
socket.disconnect()
是手动断开套接字的
socket.close()
的同义词

在客户端键入时:

const socket = io('http://localhost');
这将打开与
自动连接:true
的连接,因此当您断开套接字与服务器的连接时,lib将再次尝试重新连接,以禁用自动连接:

socket.close();
const socket = io('http://localhost', {autoConnect: false});
socket.open();// synonym to socket.connect()
如果需要,您可以手动重新连接:

socket.on('disconnect', () => {
  socket.open();
});

不,我没有。我以为这会触发服务器端的断开连接事件?我什么时候触发这个?我在你的问题中错过了这个,但是你想什么时候关闭客户端上的连接?每次服务器连接关闭时。(重新加载/刷新和页面卸载/离开)我更新了主要帖子。客户端上的
socket.disconnect()
确实触发了断开连接事件,但它并没有解决我的问题:/socket.disconnect()是否在同一行中触发断开连接事件?例如:如果下一行是“console.log('i am after dc')。该行是在断开连接事件之前执行,还是在断开连接事件之后执行?谢谢!@Milanbauškov您如何处理
getInitData
事件?
getInitData
从我自己编写的节点加载项返回一些值。这些值以一种形式(复选框、文本字段等)设置但我刚刚发现服务器上的连接已启动多次。每次我重新加载页面时,即使连接已关闭,也会添加一个新连接。服务器端和浏览器端没有连接。只有一个连接。如果其中一方关闭它,则它将关闭(而且你不能将数据推送到一个显然已关闭的连接上)。现在,当你离开页面时,浏览器会关闭连接(这不取决于你正在使用的库),这至少对WebSockets是正确的。如果出现这样的问题,那么我很确定你自己的代码(在服务器端)中有一个bug。可能你正在堆叠一些不应该堆叠的事件处理程序。你可能是对的,怪胎。是否有可能在断开连接后清理/删除处理程序?在主要帖子中,你可以看到我每次重新加载页面时都会在
io
@baam中添加一个新的处理程序是的,这是最常见的问题之一。我已经发布了我的评论作为回答,以便您可以接受它。:“如果其中一方关闭它,则它将关闭“-如何以编程方式从两侧关闭..”。。?我找不到任何文档事实上,当你离开页面或通过链接直接转到另一个页面时,
websocket
的连接将自动关闭,这是因为支持该页面的工作程序已中止。在共享工作进程上进行一次尝试,您可以在其中初始化连接并持久化套接字对象。您好。很有效,谢谢。但它是否也将用户从连接用户阵列中删除?它应该删除,但我不确定。尝试在关闭连接后打印用户阵列。完成。如何打印用户阵列?在此之前,我用这个来删除断开连接的用户。删除用户[socket.nickname]真正的参数应该做什么?thx,socket.destroy()的同义词是什么?