ReactPHPはPHPixie 8xを高速化します

画像

ReactPHPは、リクエストを継続的に処理するために作成されたPHPのソケットサーバーです。1つのリクエストを処理した後にプロセスが停止するApacheおよびNginxの標準的なアプローチとは対照的です。 この方法でコードが初期化されるのは1回だけなので、別のリクエストでは、クラスのロード、フレームワークの起動、設定の読み取りなどによるオーバーヘッド全体が失われます。



ここでの制限は、プログラマーは、発生したプロセスとすべてのサービスが何度も使用されることを覚えておく必要があるため、グローバルまたは静的スコープへのアクセスが望ましくないことです。 このため、このアプローチ用に設計されていないほとんどのフレームワークでReactPHPを使用することは困難です。



幸いなことに、PHPixie自体はグローバルスコープと静的スコープを放棄しているため、ReactPHPから簡単に実行できます。





まず、彼のサポートをプロジェクトに追加します。

php ~/composer.phar require react/react
      
      







次に、rootフォルダーにreact.phpファイルを作成します。

 <?php require_once('vendor/autoload.php'); $host = 'localhost'; $port = 1337; $framework = new Project\Framework(); $framework->registerDebugHandlers(false, false); $app = function ($request, $response) use ($framework, $host, $port) { $http = $framework->builder()->components()->http(); //   URI  $uri = 'http://'.$host.':'.$port.$request->getPath(); $uri = $http->messages()->uri($uri); //    PSR-7 $serverRequest = $http->messages()->serverRequest( $request->getHttpVersion(), $request->getHeaders(), '', $request->getMethod(), $uri, array(), $request->getQuery(), array(), array(), array() ); //     $frameworkResponse = $framework ->processHttpServerRequest($serverRequest); //   $response->writeHead( $frameworkResponse->getStatusCode(), $frameworkResponse->getHeaders() ); $response->end( $frameworkResponse->getBody() ); }; $loop = React\EventLoop\Factory::create(); $socket = new React\Socket\Server($loop); $http = new React\Http\Server($socket); $http->on('request', $app); $socket->listen($port); $loop->run();
      
      







以下を開始します。

 php react.php
      
      







次に、リンクlocalhost :1337をたどって、同じPHPixieがサーバーとしてのみ実行されていることを確認します。 デフォルトのコントローラーでの簡単なベンチマークでは、パフォーマンスが約8倍向上したことが示されましたが、各リクエストで実行されるコードの量を考慮すると驚くことではありません。 私の実験を繰り返したい人のために、ReactPHPのバックエンドとしてイベントライブラリで最高の結果を達成していることに注意してください(それがなくても動作しますが、少し遅くなります)。



確かに、ReactPHP自体にはいくつかの制限があります。 まず、静的ファイル用のWebサーバーが必要です。 しかし、最も悲しいことは、すぐに要求本体($ _POST)からのデータをサポートしないことです。ただし、 これを実現する方法はあります



一定のランタイムを設定すると、外部データベースを必要とせずにチャットを作成するなど、興味深い可能性が広がります。 もちろん、今のところこれは実験にすぎませんが、アイデアが根付いた場合、PHPixieはセッションやファイルのアップロードなど、ReactPHPをより幅広くサポートする個別のコンポーネントを取得できます。



All Articles