Do not speak Portuguese? Translate this site with Google or Bing Translator
Acelere o Laravel em cima do Swoole

Posted on: January 29, 2020 12:18 PM

Posted by: Renato

Categories: PHP Laravel

Views: 3001

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


2

Share

Donate to Site


About Author

Renato

Developer

Add a Comment
Comments 0 Comments

No comments yet! Be the first to comment

Blog Search


Categories

OUTROS (15) Variados (109) PHP (130) Laravel (158) Black Hat (3) front-end (28) linux (113) postgresql (39) Docker (27) rest (5) soap (1) webservice (6) October (1) CMS (2) node (7) backend (13) ubuntu (54) devops (25) nodejs (5) npm (2) nvm (1) git (8) firefox (1) react (6) reactnative (5) collections (1) javascript (6) reactjs (7) yarn (0) adb (1) Solid (2) blade (3) models (1) controllers (0) log (1) html (2) hardware (3) aws (14) Transcribe (2) transcription (1) google (4) ibm (1) nuance (1) PHP Swoole (5) mysql (31) macox (4) flutter (1) symfony (1) cor (1) colors (2) homeOffice (2) jobs (3) imagick (2) ec2 (1) sw (1) websocket (1) markdown (1) ckeditor (1) tecnologia (14) faceapp (1) eloquent (14) query (4) sql (40) ddd (3) nginx (9) apache (4) certbot (1) lets-encrypt (3) debian (11) liquid (1) magento (2) ruby (1) LETSENCRYPT (1) Fibonacci (1) wine (1) transaction (1) pendrive (1) boot (1) usb (1) prf (1) policia (2) federal (1) lucena (1) mongodb (4) paypal (1) payment (1) zend (1) vim (4) ciencia (6) js (1) nosql (1) java (1) JasperReports (1) phpjasper (1) covid19 (1) saude (1) athena (1) cinnamon (1) phpunit (2) binaural (1) mysqli (3) database (42) windows (6) vala (1) json (2) oracle (1) mariadb (4) dev (12) webdev (24) s3 (4) storage (1) kitematic (1) gnome (2) web (2) intel (3) piada (1) cron (2) dba (18) lumen (1) ffmpeg (2) android (2) aplicativo (1) fedora (2) shell (4) bash (3) script (3) lider (1) htm (1) csv (1) dropbox (1) db (3) combustivel (2) haru (1) presenter (1) gasolina (1) MeioAmbiente (1) Grunt (1) biologia (1) programming (22) performance (3) brain (1) smartphones (1) telefonia (1) privacidade (1) opensource (3) microg (1) iode (1) ssh (3) zsh (2) terminal (3) dracula (1) spaceship (1) mac (2) idiomas (1) laptop (2) developer (37) api (4) data (1) matematica (1) seguranca (2) 100DaysOfCode (9) hotfix (1) documentation (1) laravelphp (10) RabbitMQ (1) Elasticsearch (1) redis (2) Raspberry (4) Padrao de design (4) JQuery (1) angularjs (4) Dicas (40) Kubernetes (3) vscode (2) backup (1) angular (3) servers (2) pipelines (1) AppSec (1) DevSecOps (4) rust (1) RustLang (1) Mozilla (1) algoritimo (1) sqlite (1) Passport (1) jwt (4) security (2) translate (1) kube (2) iot (1) politica (2) bolsonaro (1) flow (1) podcast (1) Brasil (1) containers (3) traefik (1) networking (1) host (1) POO (2) microservices (2) bug (1) cqrs (1) arquitetura (2) Architecture (3) sail (3) militar (1) artigo (1) economia (1) forcas armadas (1) ffaa (1) autenticacao (1) autorizacao (2) authentication (4) authorization (2) NoCookies (1) wsl (4) memcached (1) macos (2) unix (2) kali-linux (1) linux-tools (5) apple (1) noticias (2) composer (1) rancher (1) k8s (1) escopos (1) orm (1) jenkins (4) github (5) gitlab (3) queue (1) Passwordless (1) sonarqube (1) phpswoole (1) laraveloctane (1) Swoole (1) Swoole (1) octane (1) Structurizr (1) Diagramas (1) c4 (1) c4-models (1) compactar (1) compression (1) messaging (1) restfull (1) eventdrive (1) services (1) http (1) Monolith (1) microservice (1) historia (1) educacao (1) cavalotroia (1) OOD (0) odd (1) chatgpt (1) openai (3) vicuna (1) llama (1) gpt (1) transformers (1) pytorch (1) tensorflow (1) akitando (1) ia (1) nvidia (1) agi (1) guard (1) multiple_authen (2) rpi (1) auth (1) auth (1) livros (2) ElonMusk (2) Oh My Zsh (1) Manjaro (1) BigLinux (2) ArchLinux (1) Migration (1) Error (1) Monitor (1) Filament (1) LaravelFilament (1) replication (1) phpfpm (1) cache (1) vpn (1) l2tp (1) zorin-os (1) optimization (1) scheduling (1) monitoring (2) linkedin (1) community (1) inteligencia-artificial (2) wsl2 (1) maps (1) API_KEY_GOOGLE_MAPS (1) repmgr (1) altadisponibilidade (1) banco (1) modelagemdedados (1) inteligenciadedados (4) governancadedados (1) bancodedados (2) Observability (1) picpay (1) ecommerce (1) Curisidades (1) Samurai (1) KubeCon (1) GitOps (1)

New Articles



Get Latest Updates by Email