La programmation axée sur les événements présente un défi unique pour les développeurs PHP habitués au codage procédural. Dans la nature procédurale de PHP, les événements se résument souvent aux appels de fonction simples, sans comportement asynchrone inhérent. Tout l'exécution du code reste bloque.
Cependant, les langages comme JavaScript démontrent le potentiel des boucles d'événements en tant que composant central. Cette perspicacité a conduit les développeurs à intégrer des boucles d'événements et des capacités asynchrones dans les serveurs PHP HTTP. Cet article démontre la création d'un serveur HTTP PHP HTTP haute performance tirant parti de la bibliothèque ICTICLE et l'intégrant à Apache pour un service de fichiers statique optimisé. L'exemple de code est disponible sur https://github.com/sitepoint-editors/icicle-http-server .
Avantages clés
Configuration apache pour un fichier statique optimisé servant
Pour éviter le traitement PHP inutile pour les fichiers statiques, configurez Apache pour les servir directement:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) http://%{SERVER_NAME}:9001%{REQUEST_URI} [P]
Ce mod_rewrite
Configuration dirige Apache pour transmettre les demandes de fichiers inexistants à un autre port (par exemple, 9001), où le serveur PHP ICILE les gèrera.
Un serveur de base ICTICLE HTTP
Commencez par installer ICILE:
composer require icicleio/http
Un exemple de serveur ICILE HTTP simple:
// 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();
routage avancé avec la ligue \ itinéraire
pour un routage plus robuste, intégrez la ligue \ itinéraire:
composer require league/route
amélioré server.php
avec routage:
// 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) ...
un exemple routes.php
:
$router->addRoute("GET", "/home", function () {
return "hello world";
});
Rendre des vues complexes avec la ligue \ plates
pour des vues complexes, utilisez la ligue \ plates:
composer require league/plates
implémenter des modèles (Exemple d'extraits à partir de modèles / loseout.php
et templates / home.php
, et mis à jour routes.php
sont omis pour Brevity mais suivent la structure de l'exemple d'origine).
Benchmarks de performance et conclusion
L'article d'origine comprend des références de performances démontrant la capacité du serveur à gérer un nombre important de demandes simultanées. Ces repères doivent être pris en compte dans le contexte du matériel et des conditions spécifiques dans lesquels ils ont été exécutés. Le point à retenir clé est le potentiel de hautes performances avec le modèle asynchrone de Icicle. L'article conclut en encourageant l'expérimentation et la discussion communautaire. Les repères mis à jour fournis par l'auteur Icicle sont également inclus. La section FAQ clarifie encore divers aspects de l'utilisation de Icicle pour le développement du serveur.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3