2009-06-01 10 views
2

Wie erstellen Sie Ihre eigene FastCGI-Schnittstelle in PHP?Benutzerdefinierte PHP FastCGI-Schnittstelle? (Schneller?)

Ich möchte etwas tun, was ähnlich wie they're doing in Perl, aber in PHP. Ist es überhaupt möglich? Wäre es schneller?

(Das heißt, würde Ich mag eine Web-App Framework einmal in den Speicher laden zu können, und dann nur eine Methode aufrufen FastCGI habe ich für jede Anfrage. Also nicht die allgemeinere Vorbelastung des PHP Interpreter, der in der "Standard" PHP FastCGI-Einrichtung passiert.)

Prost!

(bearbeiten: Ist nicht Mongrel und RoR dies auch tun?)

Ok Ich habe jetzt ein freakin Diagramm gemacht :)

alt text

+0

Ja, Mongrel & RoR tun dies. RoR erstellt die MVC-Anwendung und Mongrel ruft die erforderlichen Methoden auf. Ich habe jedoch keine Ahnung, wie man mit FastCGI arbeitet, also kann ich Ihnen nicht sagen, wie man es nachahmt. –

Antwort

1

ich verwechselt werden können (Es ist spät) Aber versuchen Sie nicht, irgendeine Art von Caching zu machen? Unabhängig davon scheint die FastCGI-Schnittstelle ziemlich gut definiert zu sein. Also sollte es möglich sein, das zu tun, was Sie wollen, relativ einfach.

+0

Nun, es könnte sein, dass Caching der Weg zu PHP ist. Was ich wirklich suche, ist, dass PHP-Code _and_ in den Speicher geladen wird. Stellen Sie sich ein Framework mit vielen Objekten vor. Wie es jetzt scheint, muss der gesamte Code für jede Anfrage initialisiert werden. (Selbst wenn dieser Prozess beschleunigt werden könnte, indem der Bytecode usw. zwischengespeichert wird), würde ich gerne in der Lage sein, ein Framework zu schreiben, das die Fähigkeit hat, alles einmal einzurichten.Ich schätze :) Das macht angesichts cleverer PHP-Caching-Mechanismen keinen Sinn. Ich weiß es nicht. – 0scar

+0

Aber würde das nicht viel mehr Speicher aufnehmen, was auch die Dinge verlangsamen würde? – sybreon

+0

In der Praxis ja, da der Heap bei jeder Anfrage wahrscheinlich größer und größer wird. Aber theoretisch, nein. Du lädst dieselben Sachen. Sie tun es einfach vor einer Anfrage, und nicht bei jeder Anfrage. – 0scar

0

Sie können nicht tun es in PHP für PHP, können Sie es in C für cgi-sapi tun können aber Sie wollen wahrscheinlich APC stattdessen verwenden.

+0

Sind Sie sich dessen absolut sicher? Warum nicht? – 0scar

+0

Mein schlechtes, ich meinte eigentlich fastcgi sapi. @Oscar: Fragen Sie, warum tut es nicht, was Sie erwarten? Check out http://php.net/apc es löst Ihre Bedürfnisse. – jpic

0

Wenn Sie wirklich entschlossen sind, in PHP zu sein, könnten Sie in der Theorie create a php module in c, und die Brücke für fastCGI in c bilden.

Danach würden Sie ein PHP-Skript ausführen, das auf fastCGI als eigenständiges Programm zugreift, eine Schleife ausführt und Anforderungen annimmt. In dem Sie PHP als "persistente virtuelle Maschine" verwenden (konnte keinen besseren Begriff finden), kommuniziert das über fastCGI.

Ich stimme zu, dass das erneute Laden einiger Ihrer Abhängigkeits-Bibliotheken/etc, ein sehr leicht übersichtlicher Leistungsverlust ist. Vielleicht ist es aber Absicht, den PHP-Entwicklungszyklus zu vereinfachen. Stellen Sie sich die globale Variable vor, die unerfahrene Benutzer in einer dauerhaften Umgebung machen würden. Toss in der Tatsache, dass die meisten FastCGI-Setup, mehrere Kopien/Threads entsprechend der Belastung initialisieren. Es ist eine kleine Dose Würmer. Das Starten eines leeren neuen Slate für jede Anfrage vereinfacht dies.

Aber ehrlich ... Wenn Sie sich um die Leistung kümmern, können Sie auch fastCGI C++/node.js als Alternative in Erwägung ziehen .... Nach Ihrer Entwicklung für JavaScript/PHP/C++ ist Ihre Idee definitiv möglich. .. Aber es läuft wirklich auf Kosten-Nutzen ... Ist es den Aufwand wert? Usw.

PS: Sie können auch in Betracht ziehen, Ihre PHP-Sites über Hip-Hop zu kompilieren.