Ich habe vor kurzem eine Web-App mit PeerJS entwickelt und versuche, Reconnect-Funktionalität hinzuzufügen.PeerJS Auto Reconnect
Grundsätzlich funktioniert meine app von jemandem dann eine Verbindung zu einem Server dass Kunden zu schaffen. Die Serverperson kann steuern, was die Hosts tun, aber ihre grundlegende Zwei-Wege-Kommunikation.
Wenn ein Client trennt, verbinden sie sich einfach neu und es funktioniert normal. Wenn der Serverbenutzer jedoch die Seite aktualisiert oder der Computer abstürzt, muss er die Kontrolle über die Clients wiederherstellen können.
Der Anfang davon ist durch Wiedererlangen der ursprünglichen Verbindungs-ID und der Peer-API-ID, die in einer Datenbank gespeichert und mit einer eindeutigen ID versehen ist, die der Serverbenutzer verwenden kann, um sie abzufragen. Dann den Client zu ermöglichen, ich dies wieder tun bei genauem:
// connection is closed by the host involuntarily...
conn.on('close', function() {
// if the clients connection closes set up a reconnect request loop - when the host takes back control
// the client will auto reconnect...
connected = false;
conn = null;
var reconnect_timer = setInterval(function() {
console.log('reconnecting...'); // make a fancy animation here...
conn = peer.connect(connectionid, {metadata: JSON.stringify({'type':'hello','username':username})});
// upon connection
conn.on('open', function() { // if this fails need to provide an error message... DO THIS SOON
// run the connect function...
connected = true;
connect(conn);
});
// didnt connect yet
conn.on('error', function(err) {
connected = false;
});
if(connected === true) {
clearInterval(reconnect_timer);
}
}, 1000);
});
Dies scheint zu funktionieren, wie es auf dem Server der Client-Seite sieht aus wie sie wieder angeschlossen haben - die Verbindungsfunktion hat usw. abgefeuert jedoch Nachrichten gesendet werden kann nicht zwischen, und der Client-Konsole sagt:
Error: Connection is not open. You should listen for the `open` event before sending messages.(…)
Wo die ‚offene‘ Ereignis oben zugehört ... gezeigt worden
haben ich hoffe, das ist klar - jede Hilfe ist willkommen :)