Posted on: January 29, 2020 12:18 PM
Posted by: Renato
Views: 3235
Swoole é uma estrutura de programação assíncrona de nível de produção para PHP. É uma extensão PHP escrita em linguagem C pura, que permite que desenvolvedores de PHP escrevam serviços TCP, UDP, soquete Unix, HTTP, WebSocket de alto desempenho, escaláveis e simultâneos em HTTP, sem serviços de muito conhecimento da programação de E / S sem bloqueio e kernel Linux de baixo nível. Você pode pensar no Swoole como algo como o NodeJS, mas para o PHP, com maior desempenho.
Por que rodar o Laravel no Swoole?
A imagem abaixo ilustra o ciclo de vida em PHP. Como você pode ver, quando você executa o script php sempre, o PHP precisa inicializar os módulos e iniciar o Zend Engine para o seu ambiente de execução. E seu script PHP precisa ser compilado no OpCodes para a execução do Zend Engine.
No entanto, esse ciclo de vida precisa ser repetido várias vezes em cada solicitação. Como o ambiente criado para uma única solicitação será imediatamente destruído após a conclusão do processo de solicitação.
Em outras palavras, no ciclo de vida tradicional do PHP, gasta muito tempo criando e destruindo recursos para a execução do script. E imagine em estruturas como o Laravel , quantos arquivos ele precisa carregar para uma solicitação? Também há muito consumo de E / S para carregar arquivos.
E se tivermos um servidor interno sobre o Swoole e todos os scripts puderem ser mantidos na memória após o primeiro carregamento? É por isso que tentamos rodar o Laravel no Swoole . O Swoole pode ser um poderoso impulsionador de desempenho e o Laravel fornece a estrutura elegante e o uso do código. Essa é uma combinação perfeita!
Instalação
Aqui estão os principais recursos de swooletw/laravel-swoole
:
- Execute o aplicativo Laravel / Lumen em cima do Swoole .
- Excelente desempenho, aumentando até 30x .
- Modo Sandbox para isolar o contêiner de aplicativos.
- Suporte à execução do servidor WebSocket no Laravel .
-
Socket.io
Protocolo de suporte . - Tabela Swoole de suporte para compartilhamento de dados entre processos.
Exija este pacote com o Composer:
$ composer require swooletw/laravel-swoole
Este pacote depende da extensão Swoole . Verifique se você instalou o Swoole antes de usar este pacote. Usando este comando para instalá-lo rapidamente:
pecl install swoole
Após instalar a extensão, você precisará editar o php.ini e adicionar uma extension=swoole.so
linha antes de usá-lo.
php -i | grep php.ini # check the php.ini file location sudo echo "extension=swoole.so" >> php.ini # add the extension=swoole.so to the end of php.ini php -m | grep swoole # check if the swoole extension has been enabled
Visite o site oficial para mais informações.
Aviso: Atualmente, o Swoole suporta apenas Linux e OSX. Os servidores Windows ainda não podem usar o Swoole.
Em seguida, adicione o provedor de serviços:
Se você estiver usando o Laravel , adicione o provedor de serviços à matriz do provedor em config/app.php
:
[ 'providers' => [ SwooleTW\Http\LaravelServiceProvider::class, ], ]
Se você estiver usando o Lumen , acrescente o seguinte código a bootstrap/app.php
:
$app->register(SwooleTW\Http\LumenServiceProvider::class);
Ele suporta a descoberta automática de pacotes. Se você estiver executando o Laravel 5.5, poderá pular esta etapa.
Funcionando
Agora, você pode executar o seguinte comando para iniciar o servidor HTTP Swoole.
$ php artisan swoole:http start
Então você pode ver a seguinte mensagem:
Starting swoole http server... Swoole http server started: <http://127.0.0.1:1215>
Agora você pode acessar seu aplicativo Laravel no http://127.0.0.1:1215
.
Referência
Teste com o Lumen 5.5 limpo, usando o MacBook Air 13, 2015.
Ferramenta de benchmarking: wrk
wrk -t4 -c100 http://your.app
Nginx com FPM
Running 10s test @ http://lumen.app:9999 4 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 1.14s 191.03ms 1.40s 90.31% Req/Sec 22.65 10.65 50.00 65.31% 815 requests in 10.07s, 223.65KB read Requests/sec: 80.93 Transfer/sec: 22.21KB
Servidor HTTP Swoole
Running 10s test @ http://127.0.0.1:1215 4 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 11.58ms 4.74ms 68.73ms 81.63% Req/Sec 2.19k 357.43 2.90k 69.50% 87879 requests in 10.08s, 15.67MB read Requests/sec: 8717.00 Transfer/sec: 1.55MB
Saber mais
Donate to Site
Renato
Developer