Pengaturcaraan yang didorong oleh acara memberikan cabaran unik bagi pemaju PHP yang biasa dengan pengekodan prosedur. Dalam sifat prosedur PHP, peristiwa sering merebak ke panggilan fungsi mudah, tanpa tingkah laku tak segerak yang wujud. Semua pelaksanaan kod tetap menyekat.
Walau bagaimanapun, bahasa seperti JavaScript menunjukkan potensi gelung peristiwa sebagai komponen pusat. Wawasan ini telah menyebabkan pemaju untuk mengintegrasikan gelung acara dan keupayaan tak segerak ke dalam pelayan HTTP PHP. Artikel ini menunjukkan membina pelayan PHP HTTP berprestasi tinggi yang memanfaatkan perpustakaan icicle, dan mengintegrasikannya dengan Apache untuk hidangan fail statik yang dioptimumkan. Kod contoh boleh didapati di https://www.php.cn/link/ac2ef27277aab81da1d8dea067dd80c1 .
Kelebihan Utama
konfigurasi Apache untuk hidangan fail statik yang dioptimumkan
Untuk mengelakkan pemprosesan PHP yang tidak perlu untuk fail statik, konfigurasikan Apache untuk melayani mereka secara langsung:
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*) http://%{SERVER_NAME}:9001%{REQUEST_URI} [P]
ini mengarahkan Apache untuk memohon permintaan untuk fail yang tidak wujud ke port yang berbeza (mis., 9001), di mana pelayan php icicle akan mengendalikannya. mod_rewrite
pelayan http icicle asas
bermula dengan memasang icicle:
composer require icicleio/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();
routing lanjutan dengan leagueroute
untuk penghalaan yang lebih mantap, mengintegrasikan Leagueroute:
composer require league/route
dengan penghalaan: server.php
// 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"; });
memberikan pandangan kompleks dengan ligaplates
Untuk pandangan kompleks, gunakan LeaguePlates:
composer require league/plates
dan templates/layout.php
, dan dikemas kini templates/home.php
ditinggalkan untuk keringkasan tetapi ikuti struktur contoh asal). routes.php
penanda aras prestasi dan kesimpulan
Artikel asal termasuk penanda aras prestasi yang menunjukkan keupayaan pelayan untuk mengendalikan sejumlah besar permintaan serentak. Penanda aras ini harus dipertimbangkan dalam konteks perkakasan dan syarat -syarat tertentu di mana mereka dijalankan. Takeaway utama adalah potensi untuk prestasi tinggi dengan model asynchronous Icicle. Artikel ini disimpulkan dengan menggalakkan percubaan dan perbincangan masyarakat. Penanda aras yang dikemas kini oleh pengarang icicle juga dimasukkan. Bahagian FAQ selanjutnya menjelaskan pelbagai aspek menggunakan icicle untuk pembangunan pelayan.
Atas ialah kandungan terperinci Bina pelayan php superfast dalam beberapa minit dengan icicle. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!