socket.io - 在xhr-polling中断开连接事件无法触发

5
在socket.io中,当传输方式为xhr-polling时,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');
    });
});

在以下代码中,断开连接不会触发,但如果我删除以下代码 -
io.set('transports', ['xhr-polling']);
它可以完美地工作,所以为什么它只能与WebSockets一起使用,而不能与xhr-polling一起使用?

我该如何解决这个问题?我是否忽略了什么?

提前感谢;)


我也需要这个问题的答案。 - Shazboticus S Shazbot
2
这与此答案有关吗?https://dev59.com/2WfWa4cB1Zd3GeqPhXz2 - Strat
2个回答

1

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

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

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

1

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

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

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接