2013-04-11 61 views
5

在socket.io中,當傳輸xhr-polling處於活動狀態時,斷開連接事件不會觸發。 如果我將交通工具切換到websockets,它工作正常,但在xhr輪詢它不起作用。socket.io - 斷開事件在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輪詢工作?但只有使用websockets?

我該如何解決這個問題?我錯過了什麼嗎?

由於提前;)

+0

我也需要這個問題的答案。 – 2013-04-17 22:54:16

+2

這與這個問題有關嗎? http://stackoverflow.com/questions/12043893/socket-io-force-a-disconnect-over-xhr-polling – Strat 2013-05-22 18:26:55

回答

1

這是不可能使用XHR-輪詢由於客戶端爲每個消息反覆連接立即檢測斷開。

Socket.io通過在xhr-polling套接字上設置一個不活動超時來解決這個問題。

這是有關文檔:​​

heartbeat interval配置選項。默認值是25秒。

Websocket在瀏覽器和服務器之間維護一個持久的tcp套接字,所以socket.io通常可以在套接字斷開時立即檢測到。

1

我有同樣的問題,然後我用了選項{「上卸載同步斷開」:真正}在客戶端套接字:

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

它迫使套接字立刻發送斷開事件。