Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js socket.io-断开事件不发生';在xhr轮询中不触发_Node.js_Websocket_Socket.io - Fatal编程技术网

Node.js socket.io-断开事件不发生';在xhr轮询中不触发

Node.js socket.io-断开事件不发生';在xhr轮询中不触发,node.js,websocket,socket.io,Node.js,Websocket,Socket.io,在socket.io中,当传输xhr轮询处于活动状态时,不会触发断开连接事件。 如果我将传输切换到websockets,它可以正常工作,但在xhr轮询中,它不起作用 /* Basics */ var express = require('express'), app = express(), server = require('http').createServer(app), io = require('socket.io').listen(server); serv

在socket.io中,当传输xhr轮询处于活动状态时,不会触发断开连接事件。 如果我将传输切换到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轮询一起工作呢?但只使用WebSocket?

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


提前感谢;)

使用XHR轮询不可能立即检测到断开连接,因为客户端会为每条消息重复连接

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

这是相关文件:

请参阅
心跳间隔
配置选项。默认值为25秒


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

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

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

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

我也需要这个问题的答案。这与这个答案有关吗?