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

11 浏览
0 Comments

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

如何在客户端关闭套接字连接?

我正在使用:

  • socket.io 0.9
  • node.js 0.10.15
  • express 3.3.4

例如:

调用localhost/test

-- 服务器端

var test = io
.of('/test')
.on('connection', function (socket) {
  console.log('打开套接字:' + socket);
  socket.on('disconnect', function () {
    console.log('断开连接事件');
    //socket.manager.onClientDisconnect(socket.id); --> 在服务器端的断开连接事件上产生无限循环
    //socket.disconnect(); --> 在这里也一样
  });
});

-- 客户端

var socket = io.connect('http://localhost:3000/test');
socket.on('disconnect', function () {
   console.log('断开连接客户端事件....');
});
socket.emit('getInitData', function (data) {
  .. 使用数据做一些操作
});

如果我加载测试页面,我需要从服务器获取一些值(getInitData)。

第一次访问页面时,我只获取一次数据,重新加载或第二次访问时,我会获取两次,以此类推。

在服务器端,当重新加载页面或离开页面时,连接会自动关闭。

但是在客户端,连接仍然保持打开状态。

如何在客户端关闭连接或检查是否已经存在打开的连接?

更新

我现在尝试了以下(客户端):

window.onbeforeunload = function(e) {
  socket.disconnect();
};

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

0