Kann mein Nginx-Modul eine Verbindung im Master-Prozess herstellen?

8

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%     
hobbs 15.02.2014, 21:04
quelle

1 Antwort

1
  

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.

    
VBart 18.02.2014 18:14
quelle

Tags und Links