Ich schreibe ein Juwel, wo ich zwei Prozesse abzweigen, die zwei Webrick-Server starten. Ich möchte diese Server über eine Klassenmethode von einer Basisklasse aus starten, da nur diese beiden Server laufen sollten, nicht mehrere. Während der Laufzeit möchte ich einige Methoden auf diesen beiden Servern aufrufen, um Variablen zu ändern.Share Variable durch Ruby-Prozesse
Mein Problem ist, dass ich nicht über eine Klassenmethode der Basisklasse auf die Instanzvariablen der Forks zugreifen kann. Außerdem kann ich keine Threads innerhalb meiner Basisklasse verwenden, da ich unter der Haube eine andere Bibliothek verwende, die nicht Thread-sicher ist. Also muss ich jeden Server seinem eigenen Prozess zuordnen.
Ich versuchte es mit Klassenvariablen, wie @@server
. Aber wenn ich versuche, auf diese Variablen über die Basisklasse zuzugreifen, ist es nil
. Ich habe gelesen, dass das Teilen von Klassenvariablen unter Gabeln in Ruby nicht möglich ist, habe ich recht?
Also, gibt es einen anderen Weg? Ich dachte an einen Singleton, aber ich bin mir nicht sicher, ob das die beste Idee ist.
[Inter-Prozess-Kommunikation] (http://en.wikipedia.org/wiki/Inter-process_communication) –
Nur ein Link ist ein bisschen weniger;) Ich Interprozesskommunikation kennen, aber tun Ich muss wirklich eine XML-Schnittstelle implementieren oder mit systemspezifischen Protokollen arbeiten, um dies zu erreichen? Ich dachte, vielleicht gibt es einen "Ruby-Way", um dies zu tun – 23tux
@ 23tux: Ruby-Prozesse sind getrennt, IPC ist (auf der obersten Ebene) der einzige Weg, um Ihr Problem zu lösen. Es gibt viele Ruby-Edelsteine, die jedoch helfen könnten. Sie könnten Ihre Daten wahrscheinlich einfach auf die Festplatte "marschieren" - alles, was Sie hinzufügen müssten, ist ein Locking (um partielle Lese-/Schreibvorgänge zu vermeiden), und behalten Sie die Leistung im Auge. Als nächstes kann das Marshalling zu einem lokalen 'Memcached' erfolgen, um das Berühren der Festplatte zu vermeiden. . . –