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

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

我在用:

  • socket.io 0.9
  • node.js 0.10.15
  • 表达3.3.4
  • 即:调用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
    });
    

    如果我加载测试页面,我需要一些来自服务器的值(getInitData)。
    在第一页访问我得到的数据一次,在重新加载或第二次访问我得到它两次,等等。

    服务器端的连接在页面重新加载和离开页面时自动关闭。
    但在客户端,连接仍处于打开状态。
    如何关闭客户端的连接或检查是否已经有打开的连接?

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

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

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


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

    现在浏览器在你离开页面时关闭连接(它不依赖于你在服务器端使用的库/语言/操作系统)。 这对于WebSockets来说至少是正确的(对于长时间轮询来说,这可能不是真的,因为keep-alive但是keep-alive socket.io能正确处理这个问题)。

    如果发生这样的问题,那么我很确定你自己的代码中存在一个错误(在服务器端)。 可能你正在堆叠一些事件处理程序,你不应该这样做。


    你试过了吗:

    socket.disconnect() 
    

    在客户端?


    对于socket.io版本1.4.5:

    在服务器上:

    socket.on('end', function (){
        socket.disconnect(0);
    });
    

    在客户端:

    var io = io();
    io.emit('end');
    
    链接地址: http://www.djcxy.com/p/63177.html

    上一篇: Node.js: socket.io close client connection

    下一篇: socket.io example: not working