2017-06-30 11 views
1

I von node.js Server HTML-Seite gesendet haben und Socket.io Komponente, die wie folgt zu diesem Server verbindet:Socket.io trennen erkennen und zerstören Ereignisse Client-Seite

var socket = io(); 

Auch mehrere Socket-Ereignisse:

socket.on('server-message', function(type, content) { 
    ... 
}); 

socket.on('server-update', function(type, content) { 
    ... 
}); 

das Problem ist, dass in dem Moment, Server gestoppt wird, i Client-Seite Fehler erhalten:

https://example.com/socket.io/?EIO=3&transport=polling&t=LptmQyC net::ERR_CONNECTION_REFUSED 

Sobald der Server erneut gestartet wird, stürzt er 30 Sekunden später ab.

Es sieht so aus, als könnte ich eine Erkennung verwenden, wenn der Server nicht mehr verfügbar ist, und einfach alle socketbezogenen Ereignisse löschen, dann die Verbindung durch Seitenaktualisierung oder eine Schaltfläche wiederherstellen.

Vielleicht könnte mir jemand dabei helfen.

Antwort

0

Ich glaube nicht, dass viel über den Fehler getan werden kann, seinen internen socket.io Fehler, der ein Ergebnis von erfolglosen Serverabfragen ist.

Zum besseren Verständnis wird socket.io nach dem Trennen der Verbindung in den Ajax-Abruf versetzt und versucht so bald wie möglich die Verbindung wiederherzustellen (was bedeutet, sobald der Server wieder verfügbar ist).

Serverabsturz nach Wiederverbindung auf der anderen Seite kann sehr einfach angesprochen werden. Der von Ihnen vorgestellte Code funktioniert nur in Bezug auf die Verbindungsart, die fehlenden Handler zum Trennen und optional zum erneuten Verbinden.

Ich werde Ihnen zeigen, wie Sie diesen Code hinzufügen können, um Verbindungsunterbrechungen zu verwalten (und Serverabstürze zu verhindern, nachdem es wieder hochgefahren wurde).

Zunächst einmal eine Verbindung zum Server:

var socket = io(); 

ein Trennungsereignis erstellen direkt nach (btw sein auch ein Code für Server-Seite Trennungsereignis):

socket.on('disconnect', function() { 
    destroy_socket_events(); 
}); 

Funktion erstellen, die alle zerstören Ihre Zuhörer:

var destroy_socket_events = function() { 
    socket.off('disconnect'); 
    socket.off('server-message'); 
    socket.off('server-update'); 
    // add all other socket events that you have in here ... 
}; 

Nun, was passieren wird, ist dies:

  • Verbindung hergestellt wird
  • Server gestoppt wird
  • Client trennen Ereignis löst
  • Funktion alle Ihre Buchse Hörer
  • Servers ist zurück
  • Client Reconnects (socket.io tun wird zerstört es wegen der Abfrage)
  • kein Zuhörer wird jemals an diesem Punkt ausgelöst

So können Sie den gesamten Code sicher reinitialisieren und Listener erneut ordnungsgemäß anhängen.

Verwandte Themen