Es gibt wahrscheinlich eine Menge Möglichkeiten, dies zu tun, aber ich würde eine exklusive Dateisperre verwenden, um es zu tun. Um dies zu ermöglichen, benötigen Sie genügend Netzwerkverbindung zwischen den beiden Servern, die beide eine Datei zum Schreiben öffnen können.
Ihr Basis-Algorithmus (Pseudocode) lautet wie folgt:
File f;
while (true) {
myTurn = false
try {
Open Network file for writing
myTurn = true;
} catch (IOException e) {
// not logging anything because this is expected.
// you might log that you tried maybe
myTurn = false;
}
if (myTurn) {
Do all of your actual work here.
loop many times if that's what you're doing.
don't exit this bit until your server wants to shut down
(or crashes).
But don't close the file
}
}
Im Grunde, was passiert, ist, dass Ihre Anwendung eine Datei ausschließlich zu öffnen versucht.
Wenn es nicht geöffnet werden kann, ist der andere Server gesperrt, daher sollte dieser Server ruhig bleiben.
Wenn es kann öffnen Sie die Datei, dann wird der andere Server nicht ausgeführt und dieser Server sollte die Arbeit tun.
Damit dies funktioniert, ist es absolut wichtig, dass die "Arbeit" Routine nicht hängt - solange der Prozess des anderen Servers aktiv ist, wird es auf diese Netzwerkdatei Sperre hängen. Wenn also der andere Server in eine Endlosschleife geht, haben Sie kein Glück.
Und denken Sie daran, beide Server versuchen, die gleiche Netzwerkdatei zu öffnen. Wenn sie versuchen, eine lokale Datei zu öffnen, wird es nicht funktionieren.
Diese Frage hat ein Beispiel, das Sie wahrscheinlich wieder verwenden könnten: Getting notified when a file lock is released
Sie müßten Ihre Daten in einem gemeinsamen Standort bestehen bleiben. Dann beobachtet SB vielleicht die Datenbank und wenn etwas nicht für 1 Minute geschrieben ist (oder was auch immer Ihr Intervall ist), wird es sich einschalten und die Datenbank lesen, um herauszufinden, woran es arbeitet. – mrogers
Sie können nicht. Ihre Erwartungen sind unrealistisch. Sie können eine App auf dem zweiten Computer ausführen und den Status von Anfang an laden, aber sie können den Code des anderen nicht nahtlos ausführen. –