2010-11-20 4 views
2

Ich bin neu in Java und RMI, aber ich versuche, meine App so zu schreiben, dass viele Clients mit einem einzigen Server verbunden sind. So weit, so gut ....Erkennen von Serverabsturz mit RMI

Aber wenn ich den Server schließe (ein Crash- oder Kommunikationsproblem simulierend) bleiben meine Klienten nicht bewusst, bis ich meinen nächsten Anruf zum Server mache. Es ist eine Voraussetzung, dass meine Kunden weiterhin ohne den Server im "Offline-Modus" arbeiten und je früher ich weiß, dass ich offline bin, desto besser wird die Benutzererfahrung sein.

Gibt es eine aktive Verbindung, die offen bleibt, dass der Client ein Problem mit oder ähnlichem erkennen kann - oder muss ich einfach warten, bis der nächste Anruf fehlschlägt? Ich dachte, ich könnte einen 'Health-Check' machen, der den Server anpingt, aber es schien, als wäre es nicht der beste Ansatz.

Vielen Dank für jede Hilfe

Antwort

1

Ich versuche eigentlich nur mehr über RMI und CORBA zu lernen, aber ich bin nicht so weit, wie Sie sind. Ich weiß nur, dass diese Systeme auch gebaut werden, um weniger teuer zu sein, und soweit ich weiß, ist eine aktive Verbindung eine teure Sache.

Ich würde vorschlagen, dass Sie eine Multicast-Adresse verwenden, an die Ihr Server irgendwie sendet "ich bin immer noch hier", aber ohne TCP-Verbindungen zu verwenden, sollte UDP für diesen Zweck und effizienter sein.

1

Ich habe mir das ein wenig angeschaut, als ich eine RMI-App (Uni-Zuweisung) geschrieben habe, aber ich bin nicht auf eingebaute Funktionen gestoßen, um zu testen, ob ein Remote-System aktiv ist. Ich würde einfach einen UDP-Heartbeat-Mechanismus dafür verwenden.

1

(ungetestet). Wenn ein separater RMI-Aufruf wiederholt an den Server gesendet wird, der nur "X Sekunden warten" und dann zurückgibt, sollte ihm gesagt werden, dass die Ausführung fehlgeschlagen ist, wenn der Server heruntergefahren wird.