"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Construisez un serveur PHP super-rapide en quelques minutes avec Icicle

Construisez un serveur PHP super-rapide en quelques minutes avec Icicle

Publié le 2025-03-24
Parcourir:839

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 .

Build a Superfast PHP Server in Minutes with Icicle

Avantages clés

  • Power asynchrone de Icicle: Les capacités de programmation asynchrones de Icicle de Icicle permettent la création d'un serveur PHP remarquablement rapide. La gestion de la demande simultanée augmente considérablement les performances.
  • Intégration Apache pour les fichiers statiques: décharge efficacement le fichier statique servant à apache, laissant le serveur ICILE PHP pour gérer les demandes dynamiques.
  • Améliorations de routage et de modèles: étendre le serveur de base avec un routeur (comme la ligue \ itinéraire) permet une manipulation et un routage sophistiqués. Un modèle de moteur (comme la ligue \ plaques) ajoute des fonctionnalités comme les dispositions et l'héritage des modèles pour des applications complexes.

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.

Dernier tutoriel Plus>

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