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