在socket.io中,当传输xhr轮询处于活动状态时,断开连接事件不会触发。如果我将传输切换到websocket,它可以正常工作,但在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民意调查呢?但只使用websocket?
我该怎么解决这个问题?我是不是错过了什么?
提前感谢;(
使用XHR轮询无法立即检测断开连接,因为客户端会为每条消息重复连接。
Socket.io通过在xhr轮询套接字上设置非活动超时来解决这个问题。
这是相关文件:https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO
请参阅heartbeat interval
配置选项。默认值为25秒。
Websocket在浏览器和服务器之间维护一个持久的tcp套接字,因此socket.io通常可以在套接字断开连接时立即检测到。
我遇到了同样的问题,然后我在客户端套接字中使用了选项{卸载时同步断开连接':true}:
var socket = io.connect('http://yourServerDomain.com', {'sync disconnect on unload' : true});
它强制套接字立即发送断开连接事件。