2013-04-11 2 views
5

In socket.io wird das Ereignis disconnect nicht ausgelöst, wenn das Transport-Xhr-Polling aktiv ist. Wenn ich den Transport auf WebSockets umschalte funktioniert es gut, aber in xhr-Polling funktioniert es nicht.socket.io - disconnect-Ereignis wird nicht in xhr-polling ausgelöst

/* 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'); 
    }); 
}); 

Im folgenden Code die Trenn nicht abfeuert, aber wenn ich die Zeile löschen -
io.set('transports', ['xhr-polling']);
Es funktioniert perfekt, also warum es nicht mit XHR-Polling arbeiten? aber nur mit Websockeln?

Wie kann ich das beheben? Fehle ich etwas?

Vielen Dank im Voraus;)

+0

Ich brauche die Antwort auf diese Frage auch. –

+2

Ist das mit dieser Antwort verbunden? http://stackoverflow.com/questions/12043893/socket-io-force-a-disconnect-over-xhr-polling – Strat

Antwort

1

Es ist unmöglich, sofort trennt mit XHR-Polling zu erkennen, da der Client für jede Nachricht wiederholt verbindet.

Socket.io löst dieses Problem, indem ein Inaktivitäts-Timeout für xhr-polling-Sockets festgelegt wird.

Dies ist die entsprechende Dokumentation: https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO

Siehe heartbeat interval Konfigurationsoption. Der Standardwert ist 25 Sekunden.

Websocket unterhält einen dauerhaften TCP-Socket zwischen dem Browser und dem Server, so dass socket.io normalerweise sofort erkennen kann, wenn der Socket getrennt wird.

1

Ich hatte das gleiche Problem, und dann habe ich die Option { 'Sync-disconnect auf Unload': true} in dem Client-Socket:

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

den die Buchse zwingt sofort das Trennungsereignis zu senden.