Programação orientada a eventos apresenta um desafio único para os desenvolvedores de PHP acostumados à codificação processual. Na natureza processual do PHP, os eventos geralmente se resumem a chamadas de função simples, sem comportamento assíncrono inerente. Toda a execução do código permanece bloqueando.
No entanto, idiomas como JavaScript demonstram o potencial dos loops de eventos como um componente central. Esse insight levou os desenvolvedores a integrar loops de eventos e recursos assíncronos nos servidores PHP HTTP. Este artigo demonstra a construção de um servidor PHP HTTP de alto desempenho, alavancando a biblioteca do iCicle e integrando-a ao Apache para a porção de arquivo estático otimizado. O código de exemplo está disponível em https://github.com/sitepoint-editors/icicle-http-server .
Key vantagens
Apache Configuration para arquivo estático otimizado Serving
Para evitar processamento desnecessário de PHP para arquivos estáticos, configure o Apache para servi -los diretamente:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) http://%{SERVER_NAME}:9001%{REQUEST_URI} [P]
esta configuração mod_rewrite
direciona o Apache para encaminhar solicitações de arquivos inexistentes para uma porta diferente (por exemplo, 9001), onde o servidor php iCicle os lidará.
um servidor http básico do iCicle
Comece instalando o iCicle:
composer require icicleio/http
Um exemplo de servidor http simples do iCicle:
// 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();
roteamento avançado com a liga \ rota
Para roteamento mais robusto, integrar a liga \ rota:
composer require league/route
aprimorado server.php
com roteamento:
// 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) ...
uma amostra rotas.php
:
$router->addRoute("GET", "/home", function () {
return "hello world";
});
renderizando visualizações complexas com a liga \ plates
Para visualizações complexas, use a liga \ placas:
composer require league/plates
Implementar o modelo (exemplo de trechos de modações/layout.php
e modações/home.php
e atualizado rotes.php
são omitidas para a brevidade, mas seguem a estrutura do exemplo original).
benchmarks de desempenho e conclusão
O artigo original inclui benchmarks de desempenho demonstrando a capacidade do servidor de lidar com um número significativo de solicitações simultâneas. Esses benchmarks devem ser considerados no contexto de hardware e condições específicos sob as quais foram executados. O principal argumento é o potencial de alto desempenho com o modelo assíncrono do iCicle. O artigo termina incentivando a experimentação e a discussão da comunidade. Os benchmarks atualizados fornecidos pelo autor do iCicle também estão incluídos. A seção de perguntas frequentes esclarece ainda mais vários aspectos do uso do iCicle for Server Development.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3