socket.io - 在xhr-polling中不会触发disconnect事件

jul*_*ian 5 websocket node.js socket.io

在socket.io中,当传输xhr轮询处于活动状态时,不会触发disconnect事件.如果我将传输切换到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');
    });
});
Run Code Online (Sandbox Code Playgroud)

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

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

提前致谢 ;)

sec*_*ike 1

使用 XHR 轮询无法立即检测断开连接,因为客户端会针对每条消息重复连接。

Socket.io 通过在 xhr 轮询套接字上设置不活动超时来解决此问题。

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

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

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