Ich schreibe ein nginx-Modul, das einen zeromq pubsub-Socket abonnieren und eine speicherinterne Datenstruktur basierend auf den empfangenen Nachrichten aktualisieren möchte. Um Bandbreite zu sparen, ist es sinnvoll, dass nur ein Prozess die Subskription erstellt, und die Datenstruktur sollte in shm sein, damit alle Prozesse davon Gebrauch machen können. Für mich ist es natürlich, dass dieser eine Prozess der Meister sein sollte (denn wenn es ein Arbeiter wäre, müsste der Code irgendwie entscheiden, welcher Arbeiter).
Aber wenn ich ngx_get_connection
von meinen init_master
oder init_module
Callbacks aus rufe, segmentiert es, anscheinend weil ngx_cycle
noch nicht initialisiert wurde. Google-Suchen auf Plugins, die im Master-Prozess arbeiten, erscheinen ziemlich pessimistisch. Gibt es einen besseren Weg, um mein Ziel zu erreichen, eine einzelne ausgehende Verbindung zum Pubsub-Socket pro Server herzustellen, unabhängig davon, wie viele Worker es hat?
Hier ist ein Beispiel für Code, der in einem Worker-Kontext, aber nicht vom Master funktioniert:
%Vor%und anderswo
%Vor%Um Bandbreite zu sparen, ist es sinnvoll, dass nur ein Prozess die Subskription erstellt und die Datenstruktur in shm sein sollte, damit alle Prozesse sie nutzen können. Für mich ist es natürlich, dass dieser eine Prozess der Meister sein sollte (denn wenn es ein Arbeiter wäre, müsste der Code irgendwie entscheiden, welcher Arbeiter).
Wie bereits erwähnt, müssen Sie nur Ihre natürliche Idee ablehnen und nur einen Arbeitsprozess für Ihren Zweck verwenden.
Welcher Arbeiter? Nun, lass es der erste sein, der angefangen hat.