socket.io – 断开连接事件不会在xhr-polling中触发

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

/* 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轮询不可能立即检测到断开连接。

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

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

查看heartbeat intervalconfiguration选项。 默认值是25秒。

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

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

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

它迫使套接字立即发送断开连接事件。