ホームページ >バックエンド開発 >PHPチュートリアル >PHP8.0のHTTPサーバーライブラリ: React
インターネットの発展に伴い、Web アプリケーションの重要性がますます注目されています。 HTTP サーバーは Web アプリケーションの基盤の 1 つです。 PHP の分野では、React は優れた HTTP サーバー ライブラリであり、非常に便利な開発方法を提供します。この記事では、React の基本的な概念と使い方を紹介し、その機能のいくつかを詳しく説明します。
React は、イベント ループ機構に基づいたネットワーク ライブラリです。 HTTP や Websocket などのプロトコルのサポートを提供し、非同期 IO をサポートします。他の PHP HTTP サーバー ライブラリとは異なり、React は非同期でノンブロッキングのアプローチを使用するため、多数の同時リクエストをより効率的に処理できます。
React のインストールは非常に簡単です。以下に示すように、Composer を使用してインストールできます。
composer require react/http:^1.0
次に、単純な HTTP サーバーを作成して、React の基本機能をテストします。コードは次のとおりです。
use ReactHttpResponse; use ReactHttpServer; use PsrHttpMessageServerRequestInterface; require __DIR__ . '/vendor/autoload.php'; $server = new Server(function (ServerRequestInterface $request) { return new Response( 200, array( 'Content-Type' => 'text/plain' ), "Hello World! " ); }); $socket = new ReactSocketServer('0.0.0.0:8080', $loop); $server->listen($socket); echo "Server running at http://127.0.0.1:8080 ";
このコードは、React に基づいて最も単純な HTTP サーバーを作成します。すべてのリクエストを受け入れ、「Hello World」応答を返します。ご覧のとおり、このコードは ReactHttp 名前空間の 2 つのクラス、Response と Server を使用しています。このうち、ResponseはHTTPレスポンスを表し、ServerはHTTPサーバーを表します。
React のいくつかの機能について説明しましょう:
React は非同期 IO を使用してリクエストを処理します。リクエストが到着すると、React はそのリクエストを非同期に処理し、他のリクエストの処理を続けます。これにより、サーバーは複数のリクエストを同時に処理できるようになり、パフォーマンスが向上します。
非同期 IO では、イベント ループ メカニズムを使用する必要があります。 React は、ReactEventLoopLoop クラスを通じてイベント ループを実装します。以下は簡単な例です:
require __DIR__ . '/vendor/autoload.php'; $loop = ReactEventLoopFactory::create(); $loop->addTimer(2, function () { echo "This will be echoed after 2 seconds. "; }); $loop->run(); echo "Event loop stopped. ";
このコードでは、ReactEventLoopFactory::create() を使用してイベント ループ インスタンスを作成します。次に、$loop->addTimer() メソッドを使用して 2 秒のタイマーを設定します。最後に、$loop->run() メソッドを使用してイベント ループを開始します。 2 秒待った後、イベント ループはタイマーのコールバック関数を実行し、テキストを出力します。コールバック関数の実行が完了すると、イベント ループが停止します。
HTTP サーバーを作成する場合、いくつかのルーティング ルールを設定する必要がある場合があります。 React は FastRoute ルーターの使用をサポートしています。以下に例を示します。
require __DIR__ . '/vendor/autoload.php'; $loop = ReactEventLoopFactory::create(); $router = FastRoutesimpleDispatcher(function(FastRouteRouteCollector $r) { $r->addRoute('GET', '/', function () { return new ReactHttpResponse( 200, array( 'Content-Type' => 'text/plain' ), "Hello World! " ); }); $r->addRoute('GET', '/users/{id:d+}', function ($request) { $id = $request->getAttribute('id'); return new ReactHttpResponse( 200, array( 'Content-Type' => 'text/plain' ), "User $id " ); }); }); $server = new ReactHttpServer(function ($request) use ($router) { $routeInfo = $router->dispatch($request->getMethod(), $request->getUri()->getPath()); switch ($routeInfo[0]) { case FastRouteDispatcher::NOT_FOUND: return new ReactHttpResponse(404, array('Content-Type' => 'text/plain'), 'Not found'); case FastRouteDispatcher::METHOD_NOT_ALLOWED: $allowedMethods = $routeInfo[1]; return new ReactHttpResponse(405, array('Content-Type' => 'text/plain'), 'Method not allowed'); case FastRouteDispatcher::FOUND: $handler = $routeInfo[1]; $vars = $routeInfo[2]; return $handler($request, ...array_values($vars)); } }); $socket = new ReactSocketServer('0.0.0.0:8080', $loop); $server->listen($socket); echo "Server running at http://127.0.0.1:8080 ";
このコードでは、FastRoute ルーターを使用して、HTTP サーバーに 2 つのルーティング ルールを設定します。リクエストされた URL が「/」の場合は「Hello World」が返され、リクエストされた URL が「/users/{id}」の場合は「User {id}」が返されます。このうち、{id:d} は数字の一致を意味します。 $routeInfo[0] を使用して FastRoute のルート配布結果を取得し、さまざまな結果に応じて応答を設定します。
React は、HTTP プロトコルに加えて、Websocket プロトコルの実装もサポートしています。以下は簡単な例です:
use ReactHttpResponse; use ReactHttpServer; use RatchetRFC6455MessagingMessageInterface; use RatchetWebSocketMessageComponentInterface; use RatchetWebSocketWsServer; require __DIR__ . '/vendor/autoload.php'; class EchoServer implements MessageComponentInterface { public function onOpen(ConnectionInterface $conn) { echo "Connection opened ({$conn->resourceId}) "; } public function onClose(ConnectionInterface $conn) { echo "Connection closed ({$conn->resourceId}) "; } public function onError(ConnectionInterface $conn, Exception $e) { echo "An error has occurred: {$e->getMessage()} ({$conn->resourceId}) "; $conn->close(); } public function onMessage(ConnectionInterface $from, MessageInterface $msg) { echo "Message received from ({$from->resourceId}): {$msg} "; $from->send($msg); } } $echo = new EchoServer(); $server = new Server(new WsServer($echo)); $socket = new ReactSocketServer('0.0.0.0:8080', $loop); $server->listen($socket); $loop->run();
このコードでは、EchoServer クラスを Websocket サーバーとして実装します。これは MessageComponentInterface インターフェイスを実装し、その 4 つのメソッドをオーバーライドします。リンクが開かれると onOpen() メソッドが呼び出され、リンクが閉じられると onClose() メソッドが呼び出され、リンク上でエラーが発生すると onError() メソッドが呼び出され、データが更新されると onError() メソッドが呼び出されます。リンクから受信すると、onMessage() メソッドが呼び出されます。
最後に、EchoServer インスタンスを WSServer に渡し、WebSocket リクエストをリッスンする HTTP サーバーを作成します。 ReactSocketServer を使用して IP アドレスとポートをリッスンし、$loop->run() メソッドを使用してイベント ループを開始します。
概要
React は優れた PHP HTTP サーバー ライブラリであり、非常に便利な開発方法を提供し、非同期 IO、ルーティングなどの多くの機能をサポートしています。この記事の紹介を通じて、React の機能をより深く理解し、React を使用して独自の Web アプリケーションを開発し始めることができます。
以上がPHP8.0のHTTPサーバーライブラリ: Reactの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。