Wie werde ich mit Perl FCGI getötet?

8

Ich habe ein kleines Problem mit nginx und dem Perl FCGI Modul. Ich habe eine lange Operation in meinem FCGI-Programm, das den Server (oder den Benutzer auf dem Server) am anderen Ende des Unix-Sockets überleben kann, den ich verwende, um FCGI zu kommunizieren. Ich brauche die FCGI accept () - Schleife in meinem Programm, um zu brechen, wenn die FCGI-Anfrage geschlossen wird. Ich habe versucht, INT, TERM, etc Signalhandler zu installieren, aber sie tun nichts, da die einzige Kommunikation zwischen nginx und meinem Programm über den FCGI-Socket AFAIK stattfindet.

Ich habe auch dies versucht, aber ich kann es nicht Weitere Informationen zum Verwenden des FCGI-Moduls in Perl zum Senden von Rohdaten an oder von nginx über den FCGI-Socket. Gibt es einen Weg, ich kann es tun, ohne das FCGI-Modul zu ändern, um eine "Ping" -Funktion zu haben?

Das grundlegende Problem ist, dass mein Programm nicht weiß, ob nginx die FCGI-Anfrage beendet hat.

Beispiel:

%Vor%     
njahnke 26.02.2010, 21:57
quelle

1 Antwort

1

Sie müssen eine FCGI Implementierung verwenden, die FCGI_ABORT_REQUEST behandelt.

Sie können Folgendes nicht verwenden, weil sie FCGI_ABORT_REQUEST ignorieren:

Sie könnten die folgenden verwenden, die FCGI_ABORT_REQUEST behandeln:

Bei der Verwendung von AnyEvent-FCGI ist das Suchen nach einer abgebrochenen Anfrage so einfach wie das Aufrufen von $request->is_active() , aber bedenken Sie, dass is_active() nicht den wahren Status der Anfrage widerspiegelt, bis der on_request Handler zurückkehrt, was bedeutet Sie müssen so schnell wie möglich von on_request zurückkehren und die eigentliche Arbeit "parallel" erledigen (wahrscheinlich möchten Sie nicht Perl-Threads , aber etwas, das eher Fortsetzungen ) ist, um der AnyEvent -Schleife die Möglichkeit zu geben Verarbeiten Sie weitere Anforderungen (einschließlich FCGI_ABORT_REQUEST s), während Sie die langatmigen Vorgänge abschließen.

Ich bin nicht genug vertraut mit AnyEvent , um sicher zu wissen, ob es einen besseren Weg gibt, dies zu tun, aber hier ist mein Ansatz, unten, für einen Anfang:

%Vor%     
vladr 09.03.2010, 01:37
quelle

Tags und Links