「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Icicleで数分で超高速PHPサーバーを構築します

Icicleで数分で超高速PHPサーバーを構築します

2025-03-24に投稿されました
ブラウズ:112

イベント駆動型プログラミングは、手続き的コーディングに慣れたPHP開発者にとってユニークな課題です。 PHPの手続き上の性質では、イベントはしばしば単純な機能呼び出しに要約され、固有の非同期挙動はありません。 すべてのコード実行はブロックされています。

ただし、JavaScriptのような言語は、イベントループが中心コンポーネントとしての可能性を示しています。 この洞察により、開発者はイベントループと非同期機能をPHP HTTPサーバーに統合するようになりました。この記事では、ICICLEライブラリを活用する高性能PHP HTTPサーバーの構築と、最適化された静的ファイルのサービングのためにApacheと統合することを示しています。 例コードは、 https://github.com/sitepoint-editors/icicle-http-server

で入手できます。

Build a Superfast PHP Server in Minutes with Icicle

重要な利点

  • Icicleの非同期電力: Icicleの非同期プログラミング機能により、非常に高速なPHPサーバーの作成が可能になります。 同時リクエスト処理はパフォーマンスを大幅に向上させます。
  • 静的ファイルのapache統合: apacheに静的ファイルを効率的にオフロードし、php icicleサーバーを動的要求を処理するために残します。
  • ルーティングとテンプレートの拡張機能:ルーター(League \ routeなど)で基本的なサーバーを拡張すると、洗練されたリクエストの処理とルーティングが可能になります。 テンプレートエンジン(League \ Platesなど)は、複雑なアプリケーションのレイアウトやテンプレート継承などの機能を追加します。

最適化された静的ファイルサービング用のApache構成

静的ファイルの不必要なPHP処理を避けるために、それらを直接提供するようにApacheを構成する:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) http://%{SERVER_NAME}:9001%{REQUEST_URI} [P]

この mod_rewrite configurationは、存在しないファイルのリクエストを別のポート(例えば9001)に転送するようにapacheに指示します。

基本的なiticle http server

iticleをインストールすることから始めます:

composer require icicleio/http
シンプルなiticle httpサーバーの例:

// server.php
require __DIR__ . "/vendor/autoload.php";

use Icicle\Http\Message\RequestInterface;
use Icicle\Http\Message\Response;
use Icicle\Http\Server\Server;
use Icicle\Loop;
use Icicle\Socket\Client\ClientInterface;

$server = new Server(function (RequestInterface $request, ClientInterface $client) {
    $response = (new Response(200))->withHeader("Content-Type", "text/plain");
    yield $response->getBody()->end("hello world");
    yield $response;
});

$server->listen(9001);
Loop\run();

League \ routeを使用した高度なルーティング

より堅牢なルーティングについては、リーグ\ルートを統合します:

composer require league/route
拡張

server.php withルーティング:

// server.php
// ... (previous imports) ...
use League\Route\Http\Exception\MethodNotAllowedException;
use League\Route\Http\Exception\NotFoundException;
use League\Route\RouteCollection;
use League\Route\Strategy\UriStrategy;

// ... (Server creation) ...

    $router = new RouteCollection();
    $router->setStrategy(new UriStrategy());
    require __DIR__ . "/routes.php";
    $dispatcher = $router->getDispatcher();

    try {
        $result = $dispatcher->dispatch($request->getMethod(), $request->getRequestTarget());
        $status = 200;
        $content = $result->getContent();
    } catch (NotFoundException $e) {
        $status = 404;
        $content = "not found";
    } catch (MethodNotAllowedException $e) {
        $status = 405;
        $content = "method not allowed";
    }

    // ... (Response creation and sending) ...
サンプル

routes.php

$router->addRoute("GET", "/home", function () {
    return "hello world";
});

リーグ\ platesで複雑なビューをレンダリングする

複雑なビューについては、リーグ\プレートを使用してください:

composer require league/plates
実装テンプレート(

テンプレート/layout.php および/home.php routes.php routes.php)のsnippetsの例)。

パフォーマンスベンチマークと結論

元の記事には、かなりの数の同時リクエストを処理するサーバーの機能を示すパフォーマンスベンチマークが含まれています。 これらのベンチマークは、実行された特定のハードウェアと条件のコンテキストで考慮する必要があります。 重要なポイントは、Icicleの非同期モデルで高性能の可能性です。 この記事は、実験とコミュニティの議論を奨励することで締めくくります。 ICICLE著者が提供する更新されたベンチマークも含まれています。 FAQセクションでは、サーバー開発にiticleを使用することのさまざまな側面をさらに明確にします。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3