Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Processamento Assíncrono com PHP

640 views

Published on

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

Published in: Technology
  • Be the first to comment

  • Be the first to like this

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?

×