【问题标题】:socket.io - disconnect event doesn't fire in xhr-pollingsocket.io - xhr-polling 中不触发断开事件
【发布时间】:2013-04-03 23:30:22
【问题描述】:

在 socket.io 中,当传输 xhr 轮询处于活动状态时,断开连接事件不会触发。 如果我将传输切换到 websockets 它工作正常,但在 xhr-polling 中它不起作用。

/* Basics */
var express = require('express'),
    app = express(),
    server = require('http').createServer(app),
    io = require('socket.io').listen(server);

server.listen(1337, null);

io.set('transports', ['xhr-polling']);

// routing
app.get('/', function (req, res) {
    res.sendfile("index.html");
    app.use(express.static(__dirname));
});

io.sockets.on('connection', function (socket) 
    socket.on('disconnect', function() {
        console.log('LOL');
    });
});

在下面的代码中,断开连接不会触发,但如果我删除该行 -
io.set('transports', ['xhr-polling']);
它工作得很好,为什么它不能与 xhr-polling 一起工作?但只有websockets?

我怎样才能解决这个问题?我错过了什么吗?

在此先感谢 ;)

【问题讨论】:

标签: node.js websocket socket.io


【解决方案1】:

使用 XHR-Polling 无法立即检测到断开连接,因为客户端会为每条消息重复连接。

Socket.io 通过在 xhr-polling 套接字上设置不活动超时来解决这个问题。

这是相关文档:https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO

请参阅heartbeat interval 配置选项。默认值为 25 秒。

Websocket 在浏览器和服务器之间维护一个持久的 tcp 套接字,因此 socket.io 通常可以在套接字断开连接时立即检测到。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,然后我在客户端套接字中使用了选项 {'sync disconnect on unload' : true}:

    var socket = io.connect('http://yourServerDomain.com', {'sync disconnect on unload' : true});
    

    它强制套接字立即发送断开连接事件。

    【讨论】:

      猜你喜欢
      • 2014-03-08
      • 2013-08-01
      • 2013-04-06
      • 1970-01-01
      • 2012-02-10
      • 1970-01-01
      • 2012-05-07
      • 2015-05-04
      • 2011-11-03
      相关资源
      最近更新 更多