node.js sockets.io-trennen der Verbindung alle ~25 Sekunden (heartbeat-bezogen)
Ich versuche zum einrichten einer node.js server mit socket.io. Das problem das ich sehe ist, dass mein server trennen+wiederherstellen der Verbindung der client alle 25 Sekunden.
Hier ist mein server code:
var io = require('socket.io').listen(5876);
io.sockets.on('connection', function (socket)
{
console.log("New connection established");
socket.on('disconnect', function()
{
console.log("A client has disconnected.");
});
}
Mein client verbindet sich mit dem socket.io.js Verteilung. Wie ich es verstehe (scheinbar falsch), muss ich meinen client zu senden "heartbeat" (eine Nachricht von "::2") alle 15 Sekunden verhindert, dass der server denkt, der Anschluss ist tot, und trennen Sie es. Grundsätzlich:
<script src="socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:5876');
socket.on('connect', function(data)
{
console.log("Connected to server.");
setInterval(function() { socket.emit("::2"); console.log("sent heartbeat"); }, 15000); //schedule a heartbeat for every 15 seconds
});
</script>
Aber der client ist noch immer getrennt+wieder alle 25 Sekunden (mit Ausnahme der ersten 25-Sekunden-tick).
Den node.js server-console-log sieht wie folgt aus (kann schneiden Sie aus einigen früheren identisch mit dem verbinden/trennen der Phasen, als es hallte alle 25 Sekunden):
New connection established
debug - emitting heartbeat for client 652791160849839915
debug - websocket writing 2::
debug - set heartbeat timeout for client 652791160849839915
debug - got heartbeat packet
debug - cleared heartbeat timeout for client 652791160849839915
debug - set heartbeat interval for client 652791160849839915
info - transport end
debug - set close timeout for client 652791160849839915
debug - cleared close timeout for client 652791160849839915
debug - cleared heartbeat interval for client 652791160849839915
A client has disconnected.
debug - discarding transport
debug - client authorized
info - handshake authorized 5961067041159055274
debug - setting request GET /socket.io/1/websocket/5961067041159055274
debug - set heartbeat interval for client 5961067041159055274
debug - client authorized for
debug - websocket writing 1::
New connection established
Wie kann ich verhindern, dass mein server trennen+wiederherstellen der Verbindung der client alle 25 Sekunden?
- soweit ich weiß, brauchen Sie nicht, um das manuelle senden von heartbeat-Pakete wie das gehandhabt wird von socket.io. Überprüfen Sie die Verbindung und Trennung Ereignisse nach der Einnahme aus Ihrem Handbuch Herzschlag ruft.
- hast du jemals dieses Problem beheben? ich bin mit dem genauen Problem. Ich herabgestuft 0.8.7 und immer noch gleiche Problem. debug - gefeuert-heartbeat-timeout für client 3744936361854682925 info - transport-end-debug - nahe-timeout für client 3744936361854682925 debug - geräumt in der Nähe timeout für client 3744936361854682925
- Es gibt einen workaround hier, die funktionieren könnte: github.com/socketio/socket.io/issues/777 Abgesehen davon, habe ich in letzter Zeit gerade mit den neuesten Versionen der Steckdose.io haben, und haben nicht auf Probleme stoßen.
- leider ist mein Projekt nicht verwenden können, etwas neuer als 0,9.x 1.0 verpasst eine Menge Dinge, die vollständig zu brechen unser Projekt. Ich werde dir die Problemumgehung
- Dang, hoffentlich der workaround funktioniert dann. Wenn nicht, ist die nächste Sache, die ich würde wahrscheinlich versuchen, ein downgrade auch weiter als 0.8.7 und hoffen, dass einige der älteren version nicht den bug. Abgesehen davon, dass ich fürchte, ich habe keine Ahnung.
- okay, danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die neueste version von socket.io, 0.9.1/0.9.1-1? Wenn ja, ist dies ein bekanntes Problem, bestätigt Guillermo. Die aktuelle Empfehlung ist, um roll-back zu 0.9.0 oder 0.8.7
https://github.com/LearnBoost/socket.io/issues/777
brauchen Sie nicht zu senden, einen Takt zu halten-Buchse angeschlossen, auch die syntax des Sockels.emit ist