Processamento Assíncrono com PHP
-
Upload
fernando-fabricio -
Category
Technology
-
view
143 -
download
2
Transcript of Processamento Assíncrono com PHP
![Page 1: Processamento Assíncrono com PHP](https://reader034.fdocuments.net/reader034/viewer/2022052318/58a6ec2c1a28abcf0e8b54cb/html5/thumbnails/1.jpg)
Processamento assíncrono com PHP
Fernando Fabricio dos Santos
![Page 2: Processamento Assíncrono com PHP](https://reader034.fdocuments.net/reader034/viewer/2022052318/58a6ec2c1a28abcf0e8b54cb/html5/thumbnails/2.jpg)
devparana.org
![Page 3: Processamento Assíncrono com PHP](https://reader034.fdocuments.net/reader034/viewer/2022052318/58a6ec2c1a28abcf0e8b54cb/html5/thumbnails/3.jpg)
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?
![Page 4: Processamento Assíncrono com PHP](https://reader034.fdocuments.net/reader034/viewer/2022052318/58a6ec2c1a28abcf0e8b54cb/html5/thumbnails/4.jpg)
Avisos● Estamos falando de PHP para uso em processos● A extensão pcntl não funciona no windows
![Page 5: Processamento Assíncrono com PHP](https://reader034.fdocuments.net/reader034/viewer/2022052318/58a6ec2c1a28abcf0e8b54cb/html5/thumbnails/5.jpg)
ExtensãoPara utilizar sinais com PHP é necessário a extensão PCNTL habilitada
![Page 6: Processamento Assíncrono com PHP](https://reader034.fdocuments.net/reader034/viewer/2022052318/58a6ec2c1a28abcf0e8b54cb/html5/thumbnails/6.jpg)
Modelo de Fluxo
SÍNCRONO vs ASSÍNCRONO
https://thenerdsofcolor.files.wordpress.com/2014/10/civil-war-mcu-e1413315304464.jpeg
![Page 7: Processamento Assíncrono com PHP](https://reader034.fdocuments.net/reader034/viewer/2022052318/58a6ec2c1a28abcf0e8b54cb/html5/thumbnails/7.jpg)
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
![Page 8: Processamento Assíncrono com PHP](https://reader034.fdocuments.net/reader034/viewer/2022052318/58a6ec2c1a28abcf0e8b54cb/html5/thumbnails/8.jpg)
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
![Page 9: Processamento Assíncrono com PHP](https://reader034.fdocuments.net/reader034/viewer/2022052318/58a6ec2c1a28abcf0e8b54cb/html5/thumbnails/9.jpg)
![Page 10: Processamento Assíncrono com PHP](https://reader034.fdocuments.net/reader034/viewer/2022052318/58a6ec2c1a28abcf0e8b54cb/html5/thumbnails/10.jpg)
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
![Page 11: Processamento Assíncrono com PHP](https://reader034.fdocuments.net/reader034/viewer/2022052318/58a6ec2c1a28abcf0e8b54cb/html5/thumbnails/11.jpg)
http://arquiteturadeinformacao.com/usabilidade
![Page 12: Processamento Assíncrono com PHP](https://reader034.fdocuments.net/reader034/viewer/2022052318/58a6ec2c1a28abcf0e8b54cb/html5/thumbnails/12.jpg)
![Page 13: Processamento Assíncrono com PHP](https://reader034.fdocuments.net/reader034/viewer/2022052318/58a6ec2c1a28abcf0e8b54cb/html5/thumbnails/13.jpg)
![Page 14: Processamento Assíncrono com PHP](https://reader034.fdocuments.net/reader034/viewer/2022052318/58a6ec2c1a28abcf0e8b54cb/html5/thumbnails/14.jpg)
![Page 15: Processamento Assíncrono com PHP](https://reader034.fdocuments.net/reader034/viewer/2022052318/58a6ec2c1a28abcf0e8b54cb/html5/thumbnails/15.jpg)
![Page 16: Processamento Assíncrono com PHP](https://reader034.fdocuments.net/reader034/viewer/2022052318/58a6ec2c1a28abcf0e8b54cb/html5/thumbnails/16.jpg)
Como funciona uma fila?
![Page 17: Processamento Assíncrono com PHP](https://reader034.fdocuments.net/reader034/viewer/2022052318/58a6ec2c1a28abcf0e8b54cb/html5/thumbnails/17.jpg)
docker-compose.yml
rabbit: image: rabbitmq ports: - "5672:5672"
![Page 18: Processamento Assíncrono com PHP](https://reader034.fdocuments.net/reader034/viewer/2022052318/58a6ec2c1a28abcf0e8b54cb/html5/thumbnails/18.jpg)
composer.json
{ "name": "ffsantos/teste", "require": { "php-amqplib/php-amqplib": "^2.6" }}
![Page 19: Processamento Assíncrono com PHP](https://reader034.fdocuments.net/reader034/viewer/2022052318/58a6ec2c1a28abcf0e8b54cb/html5/thumbnails/19.jpg)
sender.php<?php
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;use PhpAmqpLib\Message\AMQPMessage;
$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";
![Page 20: Processamento Assíncrono com PHP](https://reader034.fdocuments.net/reader034/viewer/2022052318/58a6ec2c1a28abcf0e8b54cb/html5/thumbnails/20.jpg)
consumer.php<?php
require_once __DIR__ . '/vendor/autoload.php';use PhpAmqpLib\Connection\AMQPStreamConnection;
$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();}
![Page 21: Processamento Assíncrono com PHP](https://reader034.fdocuments.net/reader034/viewer/2022052318/58a6ec2c1a28abcf0e8b54cb/html5/thumbnails/21.jpg)
Perguntas?