ereignisgesteuerte Programmierung stellt eine einzigartige Herausforderung für PHP-Entwickler dar, die an die prozedurale Codierung gewöhnt sind. In der Prozedurierung von PHP sind Ereignisse häufig auf einfache Funktionsaufrufe zurückzuführen, ohne inhärentes asynchrones Verhalten. Alle Code -Ausführung bleibt blockiert.
Sprachen wie JavaScript zeigen jedoch das Potenzial von Ereignisschleifen als zentrale Komponente. Diese Erkenntnisse haben Entwickler dazu veranlasst, Ereignisschleifen und asynchrone Funktionen in PHP -HTTP -Server zu integrieren. Dieser Artikel zeigt, dass das Erstellen eines Hochleistungs-PHP-HTTP-Servers erstellt wird und die Eiszapfenbibliothek nutzt und sie in Apache für eine optimierte statische Datei integriert. Der Beispielcode ist unter https://github.com/sitepoint-editors/icicle-http-server .
Schlüsselvorteile
Apache -Konfiguration für optimierte statische Datei Serving
Um unnötige PHP -Verarbeitung für statische Dateien zu vermeiden, konfigurieren Sie Apache, um sie direkt zu bedienen:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) http://%{SERVER_NAME}:9001%{REQUEST_URI} [P]
this mod_rewrite
configuration lenkt Apache, Anfragen für nicht existierende Dateien an einen anderen Port weiterzuleiten (z. B. 9001), wobei der Php-ICicle-Server sie behandelt.
ein grundlegend icicle http server
Beginnen Sie mit der Installation von ICicle:
composer require icicleio/http
Ein einfaches ICicle Http Server Beispiel:
// 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();
Fortgeschrittenes Routing mit League \ Route
für robusteres Routing integrieren Sie die Liga \ Route:
composer require league/route
Enhanced server.php
mit Routing:
// 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) ...
a sample routes.php
:
$router->addRoute("GET", "/home", function () {
return "hello world";
});
rendern komplexe Ansichten mit Liga \ Plates
für komplexe Ansichten verwenden Sie die Liga \ Platten:
composer require league/plates
implementieren templatation (Beispielausschnitte von templates/layout.php
und templates/home.php
und aktualisiert routes.php
sind für Brevität weggelassen, aber die ursprüngliche Struktur des ursprünglichen Beispiels folgt.
. .
Performance Benchmarks und Schlussfolgerung
Der ursprüngliche Artikel enthält Performance -Benchmarks, die die Fähigkeit des Servers zeigen, eine erhebliche Anzahl von gleichzeitigen Anfragen zu verarbeiten. Diese Benchmarks sollten im Kontext der spezifischen Hardware und Bedingungen berücksichtigt werden, unter denen sie ausgeführt wurden. Das wichtigste Mitnehmen ist das Potenzial für hohe Leistung mit dem asynchronen Modell von ICicle. Der Artikel schließt mit der Förderung von Experimenten und der Diskussion der Gemeinschaft. Die aktualisierten Benchmarks, die vom ICicle -Autor bereitgestellt werden, sind ebenfalls enthalten. Der FAQ -Abschnitt stellt ferner verschiedene Aspekte der Verwendung von ICicle für die Serverentwicklung klar.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3