«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Создайте сверхбыстрый сервер PHP за считанные минуты

Создайте сверхбыстрый сервер PHP за считанные минуты

Опубликовано в 2025-03-24
Просматривать:890

, управляемое событиями, представляет уникальную проблему для разработчиков PHP, привыкших к процедурному кодированию. В процессуальном характере PHP события часто сводятся к простым функциональным вызовам, без внутреннего асинхронного поведения. Все выполнение кода остается блокирующим.

]

однако, такие языки, как JavaScript, демонстрируют потенциал циклов событий в качестве центрального компонента. Это понимание заставило разработчиков интегрировать петли событий и асинхронные возможности в серверы PHP HTTP. В этой статье демонстрируется создание высокопроизводительного HTTP-сервера PHP, использующего библиотеку Icicle, и интегрировать его с Apache для оптимизированного статического файла. Пример кода доступен по адресу https://github.com/sitepoint-editors/icicle-http-server .

]

Build a Superfast PHP Server in Minutes with Icicle

ключевые преимущества

    ]
  • асинхронная мощность Icicle: асинхронные возможности программирования Icicle позволяют создавать удивительно быстрый сервер PHP. Одновременная обработка запросов значительно повышает производительность.
  • ]
  • Integration Apache для статических файлов: эффективно разгружает статический файл, служащий в Apache, оставляя сервер PHP Icicle для обработки динамических запросов.
  • Усовершенствования маршрутизации и шаблона: расширение базового сервера с помощью маршрутизатора (например, League \ Route) позволяет обеспечить сложную обработку и маршрутизацию запросов. Шаблонный двигатель (например, лига \ пластины) добавляет такие функции, как макеты и наследование шаблонов для сложных приложений.
  • ]
]

Apache Configuration для оптимизированного статического файла ARERING

]

Чтобы избежать ненужной обработки PHP для статических файлов, настройте Apache, чтобы обслуживать их напрямую:

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

mod_rewrite конфигурация направляет Apache для пересылки запросов на несуществующие файлы в другой порт (например, 9001), где сервер PHP Icicle обрабатывает их. ]

Basic Picicle Http Server ]

]

Composer требует icicleio/http
composer require icicleio/http
]

// server.php требуется __dir__. "/vendor/autoload.php"; Используйте Icicle \ http \ message \ requestInterface; Используйте Icicle \ http \ message \ response; Используйте Icicle \ HTTP \ Server \ Server; Используйте Icicle \ Loop; Используйте Icicle \ Socket \ Client \ ClientInterface; $ server = новый сервер (функция (requestInterface $ request, clientInterface $ client) { $ response = (новый ответ (200))-> withHeader ("контент-тип", "text/plain"); Доходность $ response-> getbody ()-> end ("Hello World"); Доходность $ ответ; }); $ server-> слушать (9001); Loop \ Run ();
// 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();
расширенная маршрутизация с лигой \ route

] для более надежной маршрутизации, интегрируйте лигу \ route:

]

Composer требует лиги/route
composer require league/route
server.php

с маршрутизацией:

// server.php // ... (предыдущий импорт) ... Использовать лигу \ route \ http \ exception \ methodnotallowedException; Использовать лигу \ route \ http \ exception \ notFoundException; Использовать лигу \ route \ routecollection; Использовать лигу \ маршрут \ стратегия \ uristrategy; // ... (Создание сервера) ... $ router = new RouteCollection (); $ router-> setstrategy (new uristrategy ()); требуется __dir__. "/routes.php"; $ dispatcher = $ router-> getDispatcher (); пытаться { $ result = $ dispatcher-> dispatch ($ request-> getMethod (), $ request-> getRequestTarget ()); $ Статус = 200; $ content = $ result-> getContent (); } catch (notFoundException $ e) { $ Статус = 404; $ content = "не найдено"; } catch (methodNotAllowedException $ e) { $ Статус = 405; $ content = "Метод не разрешен"; } // ... (Создание и отправка ответов) ...
// 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) ...
:

] $ router-> addroute ("get", "/home", function () { вернуть "Привет, мир"; });

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

] для сложных взглядов используйте лигу \ Пластин: ]

Composer требует League/Plates

composer require league/plates
и

templates/home.php и обновляется routes.php , осторожно, но следуют структуре исходного примера). Cerformance Clarkmarks and Clustrusion

]

исходная статья включает в себя контрольные показатели производительности, демонстрирующие возможность сервера обрабатывать значительное количество параллельных запросов. Эти критерии следует учитывать в контексте конкретного оборудования и условий, при которых они были запускаются. Ключевым выводом является потенциал для высокой производительности с асинхронной моделью Icicle. В заключении статья поощряет эксперименты и обсуждение сообщества. Обновленные тесты, предоставленные автором соликости, также включены. Раздел часто задаваемых вопросов дополнительно разъясняет различные аспекты использования осоцикола для разработки сервера. ]

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3