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

wsint 发布于 2019-03-09 node.js 最后更新 2019-03-09 14:41 0 浏览

在socket.io中,当传输xhr-polling处于活动状态时,断开事件不会触发。 如果我将交通工具切换到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?

我怎样才能解决这个问题?我错过了什么吗? 提前致谢 ;)
已邀请:

ut_et

赞同来自:

由于客户端针对每条消息重复连接,因此无法使用XHR轮询立即检测断开连接。 Socket.io通过在xhr-polling套接字上设置不活动超时来解决这个问题。 这是相关文档:https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO 请参阅heartbeat interval配置选项。默认值为25秒。 Websocket在浏览器和服务器之间维护一个持久的tcp套接字,因此socket.io通常可以在套接字断开时立即检测到。

baut

赞同来自:

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

var socket = io.connect('http://yourServerDomain.com', {'sync disconnect on unload' : true});
它强制套接字立即发送断开事件。