Introdução à Programação Assíncrona em PHP
Tradicionalmente, o PHP opera em modo síncrono: cada requisição é executada sequencialmente, linha por linha. No entanto, no desenvolvimento web moderno, há uma necessidade crescente de processar múltiplas tarefas simultaneamente — desde o envio de e-mails até o trabalho com WebSocket e APIs. A programação assíncrona em PHP permite resolver essas tarefas de forma eficiente, sem bloquear o fluxo principal de execução.
Neste guia, vamos explorar o que é assincronia, por que ela é necessária e como começar a usá-la em PHP. Você aprenderá sobre as principais ferramentas: Fiber, ReactPHP, Swoole e funções nativas para trabalhar com corrotinas.
O que é Programação Assíncrona e por que ela é necessária?
Código Síncrono vs Assíncrono
Imagine que você está pedindo uma pizza. Abordagem síncrona: você liga, espera até que ela seja preparada e só então desliga o telefone. Abordagem assíncrona: você liga, faz o pedido e, enquanto a pizza é preparada, cuida de outras coisas. Em PHP, isso se parece com:
// Código síncrono (bloqueante)$data = file_get_contents('https://api.example.com');echo "Dados recebidos: " . $data; // Aguarda o carregamento
// Código assíncrono (não bloqueante)$promise = async_file_get_contents('https://api.example.com');echo "Requisição enviada, pode fazer outras coisas...";$data = await($promise); // Obtém o resultado depoisProblemas do PHP Síncrono
- Bloqueio de I/O: operações com arquivos, bancos de dados ou requisições de rede interrompem a execução do script
- Baixo desempenho: cada nova requisição exige um processo ou thread separado
- Problemas com tempo real: chats, notificações e streaming funcionam de forma ineficiente
Vantagens da Abordagem Assíncrona
- Processamento simultâneo de centenas e milhares de conexões
- Economia de memória e recursos do servidor
- Possibilidade de criar aplicações em tempo real
- Interfaces mais responsivas
Principais Ferramentas de PHP Assíncrono
1. Corrotinas e Fiber (PHP 8.1+)
A partir do PHP 8.1, foi introduzido o suporte nativo para Fiber — corrotinas leves. O Fiber permite pausar a execução de uma função e retomá-la posteriormente, sem bloquear o fluxo principal.
<?php$fiber = new Fiber(function(): void { $value = Fiber::suspend('first'); echo "Retomado com o valor: $value";});
$value = $fiber->start();echo "Valor inicial: $value"; // first$fiber->resume('second'); // Retomado com o valor: second?>2. ReactPHP — Event Loop para PHP
ReactPHP é uma biblioteca que implementa a programação orientada a eventos (event loop). Ela permite realizar operações de entrada e saída não bloqueantes.
<?phprequire 'vendor/autoload.php';
$loop = React\\EventLoop\\Loop::get();
$loop->addTimer(1.0, function () { echo "Passou 1 segundo";});
$loop->addTimer(2.0, function () { echo "Passaram 2 segundos";});
echo "Início...";$loop->run();?>O ReactPHP também fornece clientes e servidores HTTP assíncronos:
<?php$browser = new React\\Http\\Browser($loop);
$browser->get('https://api.example.com')->then( function (Psr\\Http\\Message\\ResponseInterface $response) { echo "Resposta: " . $response->getBody(); }, function (Exception $e) { echo "Erro: " . $e->getMessage(); });?>3. Swoole — Servidor Assíncrono de Alto Desempenho
Swoole é uma extensão para PHP que o transforma em um servidor assíncrono completo. Ele suporta corrotinas, WebSocket, servidores TCP/UDP e muito mais.
<?ph