Meine Aufgabe ist es, ein verteiltes Semaphorsystem (Links zur Beschreibung) und eine Anwendung dafür zu implementieren . Ich werde Java-Sockets verwenden und Wasserzeichen-Arrays und Prioritätswarteschlangen verwenden (nicht sicher, wo). Daher bin ich gespannt, wie ich dieses Projekt angehen soll. Insbesondere möchte ich wissen, was ein gutes Ziel für den ersten Schritt oder ein einfaches Subsystem ist, das ich implementieren kann. Im Moment weiß ich einfach nicht, wo ich meine Aufmerksamkeit konzentrieren soll.
Die Anwendung ist ein Floating-Lizenzsystem - wie in einem Computerraum mit nur einer Kopie einer Software (möglicherweise einem CAD-Programm), mit dem jeweils nur ein PC die Software verwenden kann. Wenn ein Computer die Software verwendet, ist der Zugriff auf die Software gesperrt. Wenn diese Maschine damit fertig ist, gibt sie es auf und wer zuerst angefordert hat, sollte der nächste sein.
Hier ist der Pseudocode-Algorithmus, auf den verwiesen wird - http://i.imgur.com/q9kRm.png
Antworten:
Beginnen Sie mit dem Subsystem "Handshake", mit dem lizenzierte Anwendungen, die auf einem bestimmten Computer ausgeführt werden, eine Sitzung auf Ihrem Lizenzserver registrieren und ein Token erhalten können, das sie für weitere Interaktionen eindeutig identifiziert.
Ich denke, es wäre vernünftig, wenn dieses Subsystem auch einige "Verhandlungen" über das weitere Kommunikationsprotokoll beinhalten würde ("Herzschlagsignale werden voraussichtlich mit einer Geschwindigkeit zwischen 5 und 10 Sekunden ausgetauscht" - solche Sachen).
quelle
Generische Antwort
Semaphor ist eine Ressourcenzuweisungstechnik zum Verwalten von Deadlocks und Race-Bedingungen über Prioritätswarteschlangen. Metaphorisch ausgedrückt, Sie können 3 Fahrräder mieten. Angenommen, Sie mieten es nach dem Prinzip "Wer zuerst kommt, mahlt zuerst". Wenn Sie also alle Ihre 3 Fahrräder gemietet haben und eine vierte Person dies anfordert, muss sie warten, bis eines von ihnen das Fahrrad zurückgebracht hat. Es besteht die Möglichkeit, dass Sie das Fahrrad für jemanden reservieren, jemand ein bereits reserviertes Fahrrad storniert und so weiter. Ähnlich wie bei Prozessen, die einige Ressourcen erwerben möchten, werden Semaphoren verwendet.
Bei einem verteilten Semaphor können mehrere Ressourcen vorhanden sein, auf die mehrere Prozesse zugreifen können. Angenommen, ein Server hostet eine Anwendung und kann mehrere Instanzen davon hosten, und der Benutzer kann die Anwendung verwenden, wenn sie kostenlos ist. Der Server sei S1, S2, .. Sn, während die Anwendung A1, A2, ... An und die Benutzer U1, U2, ... Un sind. Wenn der erste Server also drei Instanzen der Anwendung hosten könnte, würde er als S1A1, S1A2, S1A3 bezeichnet. Nehmen Sie zum besseren Verständnis auch die Anwendungsinstanzen als Slots oder Boxen an. Ein Steckplatz gilt als leer, wenn er frei und voll ist, wenn er belegt ist. In diesem Fall wird die folgende Methode vorgeschlagen
Empfohlene Ressourcen
Spezifische Antwort auf die Frage im Kontext
Wenn ich mir den Code anschaue, bevorzuge ich die klassische Version eines Semaphors. Java hat ein eingebautes Semaphor- Paket, um dies zu tun, und Sie können einfach darauf aufbauen.
Angenommen, nur eine Instanz der Anwendung sollte im LAN ausgeführt werden
Die folgenden Einschränkungen sind erwägenswert
Zum besseren Verständnis würde ich wahrscheinlich Folgendes vorschlagen
BEARBEITEN Antwort vollständig bearbeitet, da die ursprüngliche Antwort auf einer viel breiteren Perspektive basiert
quelle