Acelere o Laravel em cima do Swoole

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.

Ciclo de vida do PHP

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.ioProtocolo 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.solinha 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

https://github.com/swooletw/laravel-swoole

https://github.com/swooletw/laravel-swoole/wiki

Renato Lucena

Developer PHP, Laravel. Goiania-GO https://www.linkedin.com/in/renato-de-oliveira-lucena-33777133/

Você pode gostar...