在socket.io中,当传输xhr-polling处于事件状态时,disconnect事件不会触发。
如果我将传输方式切换为websocket,则可以正常运行,但在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?

我怎样才能解决这个问题?我想念什么吗?

提前致谢 ;)

最佳答案

使用XHR-Polling不可能立即检测到断开连接,因为客户端针对每条消息重复连接。

Socket.io通过在xhr-polling套接字上设置不事件超时来解决此问题。

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

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

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

10-07 23:25