21
Processamento assíncrono com PHP Fernando Fabricio dos Santos

Processamento Assíncrono com PHP

Embed Size (px)

Citation preview

Page 1: Processamento Assíncrono com PHP

Processamento assíncrono com PHP

Fernando Fabricio dos Santos

Page 2: Processamento Assíncrono com PHP

devparana.org

Page 3: Processamento Assíncrono com PHP

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

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

ExtensãoPara utilizar sinais com PHP é necessário a extensão PCNTL habilitada

Page 6: Processamento Assíncrono com PHP

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

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

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
Page 10: Processamento Assíncrono com PHP

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

http://arquiteturadeinformacao.com/usabilidade

Page 12: Processamento Assíncrono com PHP
Page 13: Processamento Assíncrono com PHP
Page 14: Processamento Assíncrono com PHP
Page 15: Processamento Assíncrono com PHP
Page 16: Processamento Assíncrono com PHP

Como funciona uma fila?

Page 17: Processamento Assíncrono com PHP

docker-compose.yml

rabbit: image: rabbitmq ports: - "5672:5672"

Page 18: Processamento Assíncrono com PHP

composer.json

{ "name": "ffsantos/teste", "require": { "php-amqplib/php-amqplib": "^2.6" }}

Page 19: Processamento Assíncrono com PHP

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

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

Perguntas?