Processamento assíncrono
com PHP
Fernando Fabricio dos Santos
devparana.org
Objetivos
● Definição de fluxos síncronos e assíncronos
● O que são sinais e interrupções?
● Qual a finalidade?
● Como fun...
Avisos
● Estamos falando de PHP para uso em processos
● A extensão pcntl não funciona no windows
Extensão
Para utilizar sinais com PHP é necessário a extensão PCNTL habilitada
Modelo de Fluxo
SÍNCRONO vs ASSÍNCRONO
https://thenerdsofcolor.files.wordpress.com/2014/10/civil-war-mcu-e1413315304464.jp...
Fluxo síncrono
● Uma tarefa executada por vez
● Executadas em sequência
● Tarefas são sempre executadas na mesma ordem
● U...
Thread
● Múltiplas Threads
● Tarefas executadas ao mesmo tempo
● Tarefas são executadas independente do resultado obtido p...
Fluxo assíncrono
● Controle da execução pode ser feito no próprio
software
● É executado no mesmo processo
● Callbacks (ca...
http://arquiteturadeinformacao.com/usabilidade
Como funciona uma fila?
docker-compose.yml
rabbit:
image: rabbitmq
ports:
- "5672:5672"
composer.json
{
"name": "ffsantos/teste",
"require": {
"php-amqplib/php-amqplib": "^2.6"
}
}
sender.php
<?php
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLibConnectionAMQPStreamConnection;
use PhpAmqpL...
consumer.php
<?php
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLibConnectionAMQPStreamConnection;
$connectio...
Perguntas?
Processamento Assíncrono com PHP
Processamento Assíncrono com PHP
Processamento Assíncrono com PHP
Processamento Assíncrono com PHP
Processamento Assíncrono com PHP
Próximos SlideShares
Carregando em…5
×

Processamento Assíncrono com PHP

102 visualizações

Publicada em

Palestra sobre processamento assíncrono e utilização do RabbitMQ para criar uma fila.

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
102
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
0
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Processamento Assíncrono com PHP

  1. 1. Processamento assíncrono com PHP Fernando Fabricio dos Santos
  2. 2. devparana.org
  3. 3. Objetivos ● Definição de fluxos síncronos e assíncronos ● O que são sinais e interrupções? ● Qual a finalidade? ● Como funcionam os sinais? ● Como devo tratá-los?
  4. 4. Avisos ● Estamos falando de PHP para uso em processos ● A extensão pcntl não funciona no windows
  5. 5. Extensão Para utilizar sinais com PHP é necessário a extensão PCNTL habilitada
  6. 6. Modelo de Fluxo SÍNCRONO vs ASSÍNCRONO https://thenerdsofcolor.files.wordpress.com/2014/10/civil-war-mcu-e1413315304464.jpeg
  7. 7. Fluxo síncrono ● Uma tarefa executada por vez ● Executadas em sequência ● Tarefas são sempre executadas na mesma ordem ● Um erro pode impedir a execução de tarefas posteriores http://cs.brown.edu/courses/cs168/s12/handouts/async.pdf
  8. 8. Thread ● Múltiplas Threads ● Tarefas executadas ao mesmo tempo ● Tarefas são executadas independente do resultado obtido pela anterior http://cs.brown.edu/courses/cs168/s12/handouts/async.pdf
  9. 9. Fluxo assíncrono ● Controle da execução pode ser feito no próprio software ● É executado no mesmo processo ● Callbacks (call_user_func ou outra função que receba um callback como parâmetro) http://cs.brown.edu/courses/cs168/s12/handouts/async.pdf
  10. 10. http://arquiteturadeinformacao.com/usabilidade
  11. 11. Como funciona uma fila?
  12. 12. docker-compose.yml rabbit: image: rabbitmq ports: - "5672:5672"
  13. 13. composer.json { "name": "ffsantos/teste", "require": { "php-amqplib/php-amqplib": "^2.6" } }
  14. 14. sender.php <?php require_once __DIR__ . '/vendor/autoload.php'; use PhpAmqpLibConnectionAMQPStreamConnection; use PhpAmqpLibMessageAMQPMessage; $connection = new AMQPStreamConnection( 'localhost', 5672, 'guest', 'guest' ); $channel = $connection->channel(); $channel->queue_declare('hello', false, false, false, false); $msg = new AMQPMessage('Hello World!'); $channel->basic_publish($msg, '', 'hello'); echo " [x] Sent 'Hello World!'n";
  15. 15. consumer.php <?php require_once __DIR__ . '/vendor/autoload.php'; use PhpAmqpLibConnectionAMQPStreamConnection; $connection = new AMQPStreamConnection( 'localhost', 5672, 'guest', 'guest' ); $channel = $connection->channel(); $channel->queue_declare('hello', false, false, false, false); echo ' [*] Waiting for messages. To exit press CTRL+C', "n"; $callback = function ($msg) { echo " [x] Received ", $msg->body, "n"; }; $channel->basic_consume('hello', '', false, true, false, false, $callback); while (count($channel->callbacks)) { $channel->wait(); }
  16. 16. Perguntas?

×