WSGI / PHP用ラック

歴史的に、PHPスクリプトはすべてのHTTP要求で実行されます。 スクリプトが起動されると、スクリプトは何らかの初期化を実行し(たとえば、DBMSへの接続を確立します)、その後、要求を分析して応答を生成します。 ただし、PythonとRubyの世界では異なるアプローチが取られていることは誰もがよく知っています。これらの言語のWebアプリケーションは、Webサーバー(またはアプリケーションサーバー)と同時にメモリにロードされます。 アプリケーションサーバーは、標準のWSGIおよびRackインターフェイスを使用してスクリプトと対話します。 もちろん、このアプローチには欠点がないわけではありません。その主な理由は、1つのサーバーに多数のサイトを配置する際のオーバーヘッドの急激な増加に関連する可能性がありますが、重要な利点があります:初期化は1回だけ実行され、その後、スクリプトは着信HTTPにのみ応答しますお問い合わせ。



要求処理サイクルをPHPスクリプトの本体に転送する試みは既に行わています 、生産性の大幅な向上を達成することは可能でした。 ただし、このためには多くのコードを作成する必要がありました。



ただし、先日、uWSGIの作成者は、WSGI / Rack for PHPに類似しインターフェースの実験的サポートを実装しました 。 uWSGIは、今日存在するほぼすべての言語とテクノロジーをサポートする非常に柔軟で機能的なアプリケーションサーバーであり、PHP-FPMの代替として簡単に使用できることを思い出してください。 したがって、常に少ないメモリでメモリにロードされるWebアプリケーションを作成することが可能になりました。



インターフェイスは「phpsgi」と呼ばれます。 このインターフェースのサポートを実装するプラグインはまだかなり気味が悪いですが、開発者はすでにそれを一般大衆に見せたいという願望を表明しています。



しかし、私は絶対にテスト/レポートとそれを試して喜んで人々を収集するようお願いします:)




uWSGIがすでに構成されているプラ​​グインをインストールするのは非常に簡単です。



uwsgi --build-plugin https://github.com/unbit/uwsgi-phpsgi
      
      







このようなコマンドを実行すると、ファイル「phpsgi_plugin.so」が現在のディレクトリに表示されます。これは、他のサーバープラグイン(通常は/ usr / lib / uwsgi)と共にディレクトリに配置するのに十分です。 その後、vassal(仮想ノード)を構成するか、uWSGIインスタンスを手動で実行できます。 簡単にするために、2番目のオプションを検討してください。



 uwsgi --plugin phpsgi --http-socket :9090
      
      







このようなコマンドを実行すると、uWSGIは「app.php」という名前のファイルにアクセスします。このファイルには、「application」関数が含まれている必要があります。 現時点では、プラグインは実験的であるため、これらの名前はコード内で厳密に定義されています。 このプラグインに「フィード」できるPHPコードの最も単純な例を考えてみましょう。



 <?php echo 'Loading'; function application($env) { return ['200 OK', ['Content-Type' => 'text/plain'], 'Hello, world!']; }
      
      







この例では、文字列「Hello、world!」がブラウザに出力されますが、文字列「Loading」はuWSGI vassalログに1回表示されます。



All Articles