SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Downloaden Sie, um offline zu lesen
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 funcionam os sinais?
● Como devo tratá-los?
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.jpeg
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
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
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
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 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";
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();
}
Perguntas?

Weitere ähnliche Inhalte

Was ist angesagt?

Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...
Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...
Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...Tchelinux
 
Como Escrever Módulos Para o Kernel - Fábio Olivé Leite
Como Escrever Módulos Para o Kernel - Fábio Olivé LeiteComo Escrever Módulos Para o Kernel - Fábio Olivé Leite
Como Escrever Módulos Para o Kernel - Fábio Olivé LeiteTchelinux
 
Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Luís Cobucci
 
Deixando de ser moleque com PHP
Deixando de ser moleque com PHPDeixando de ser moleque com PHP
Deixando de ser moleque com PHPVinícius Krolow
 
Apresentação Introdução Typescript - .Net Caxias do Sul
Apresentação   Introdução Typescript - .Net Caxias do SulApresentação   Introdução Typescript - .Net Caxias do Sul
Apresentação Introdução Typescript - .Net Caxias do SulGlaucia Lemos
 
10+ Coisas Que Odeio Em Php
10+ Coisas Que Odeio Em Php10+ Coisas Que Odeio Em Php
10+ Coisas Que Odeio Em PhpAlmir Mendes
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Luís Cobucci
 

Was ist angesagt? (9)

Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...
Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...
Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...
 
Arquivo1
Arquivo1Arquivo1
Arquivo1
 
Como Escrever Módulos Para o Kernel - Fábio Olivé Leite
Como Escrever Módulos Para o Kernel - Fábio Olivé LeiteComo Escrever Módulos Para o Kernel - Fábio Olivé Leite
Como Escrever Módulos Para o Kernel - Fábio Olivé Leite
 
Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011
 
Deixando de ser moleque com PHP
Deixando de ser moleque com PHPDeixando de ser moleque com PHP
Deixando de ser moleque com PHP
 
Cvhg
CvhgCvhg
Cvhg
 
Apresentação Introdução Typescript - .Net Caxias do Sul
Apresentação   Introdução Typescript - .Net Caxias do SulApresentação   Introdução Typescript - .Net Caxias do Sul
Apresentação Introdução Typescript - .Net Caxias do Sul
 
10+ Coisas Que Odeio Em Php
10+ Coisas Que Odeio Em Php10+ Coisas Que Odeio Em Php
10+ Coisas Que Odeio Em Php
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011
 

Andere mochten auch

[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites
[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites
[QCon 2011] Por uma web mais rápida: técnicas de otimização de SitesCaelum
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanElton Minetto
 
LaravelSP - MySQL 5.7: introdução ao JSON Data Type
LaravelSP - MySQL 5.7: introdução ao JSON Data TypeLaravelSP - MySQL 5.7: introdução ao JSON Data Type
LaravelSP - MySQL 5.7: introdução ao JSON Data TypeGabriela Ferrara
 
Ansible - Automacao de Infraestrutura de TI
Ansible - Automacao de Infraestrutura de TI Ansible - Automacao de Infraestrutura de TI
Ansible - Automacao de Infraestrutura de TI Marcos Vieira
 
Aprender CSS (UFCD0154) v2
Aprender CSS (UFCD0154) v2Aprender CSS (UFCD0154) v2
Aprender CSS (UFCD0154) v2Afonso Gomes
 
Aprender PHP e mySQL (UFCD0155)
Aprender PHP e mySQL (UFCD0155)Aprender PHP e mySQL (UFCD0155)
Aprender PHP e mySQL (UFCD0155)Afonso Gomes
 
Aprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCDAprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCDAfonso Gomes
 
Trabalhando com a infraestrutura como software na AWS com Elastic Beanstalk e...
Trabalhando com a infraestrutura como software na AWS com Elastic Beanstalk e...Trabalhando com a infraestrutura como software na AWS com Elastic Beanstalk e...
Trabalhando com a infraestrutura como software na AWS com Elastic Beanstalk e...Bruno Rodrigues
 
Orquestrando Docker Containers: Machine, Swarm e Compose
Orquestrando Docker Containers: Machine, Swarm e ComposeOrquestrando Docker Containers: Machine, Swarm e Compose
Orquestrando Docker Containers: Machine, Swarm e ComposeRoberto Hashioka
 
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker ComposeScrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker ComposeStefan Teixeira
 
TDC 2015 Floripa - Criando ambientes de forma simples com Docker e Ansible
TDC 2015 Floripa - Criando ambientes de forma simples com Docker e AnsibleTDC 2015 Floripa - Criando ambientes de forma simples com Docker e Ansible
TDC 2015 Floripa - Criando ambientes de forma simples com Docker e AnsibleStefan Teixeira
 
Bluesoft - Sistema de Gestão - Apresentação Comercial
Bluesoft - Sistema de Gestão - Apresentação ComercialBluesoft - Sistema de Gestão - Apresentação Comercial
Bluesoft - Sistema de Gestão - Apresentação ComercialBluesoft
 
VI congresso fecomercio de crimes eletrônicos 04082014 - apresentação de pa...
VI congresso fecomercio de crimes eletrônicos   04082014 - apresentação de pa...VI congresso fecomercio de crimes eletrônicos   04082014 - apresentação de pa...
VI congresso fecomercio de crimes eletrônicos 04082014 - apresentação de pa...FecomercioSP
 
HACKING EDUCATION - A metodologia ensino-aprendizagem deve ser Hackeada
HACKING EDUCATION - A metodologia ensino-aprendizagem deve ser HackeadaHACKING EDUCATION - A metodologia ensino-aprendizagem deve ser Hackeada
HACKING EDUCATION - A metodologia ensino-aprendizagem deve ser HackeadaDouglas A. Gomes da Silva
 
Apresentação do Bluesoft ERP - Módulo Logístico
Apresentação do Bluesoft ERP - Módulo LogísticoApresentação do Bluesoft ERP - Módulo Logístico
Apresentação do Bluesoft ERP - Módulo LogísticoBluesoft
 
Apresentação do Bluesoft ERP - Módulo Contábil
Apresentação do Bluesoft ERP - Módulo ContábilApresentação do Bluesoft ERP - Módulo Contábil
Apresentação do Bluesoft ERP - Módulo ContábilBluesoft
 
Apresentação do Bluesoft ERP - Módulo de CRM e DP
Apresentação do Bluesoft ERP - Módulo de CRM e DPApresentação do Bluesoft ERP - Módulo de CRM e DP
Apresentação do Bluesoft ERP - Módulo de CRM e DPBluesoft
 

Andere mochten auch (20)

Precisa testar? - Parte 1
Precisa testar? - Parte 1Precisa testar? - Parte 1
Precisa testar? - Parte 1
 
[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites
[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites
[QCon 2011] Por uma web mais rápida: técnicas de otimização de Sites
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando Gearman
 
LaravelSP - MySQL 5.7: introdução ao JSON Data Type
LaravelSP - MySQL 5.7: introdução ao JSON Data TypeLaravelSP - MySQL 5.7: introdução ao JSON Data Type
LaravelSP - MySQL 5.7: introdução ao JSON Data Type
 
Ansible - Automacao de Infraestrutura de TI
Ansible - Automacao de Infraestrutura de TI Ansible - Automacao de Infraestrutura de TI
Ansible - Automacao de Infraestrutura de TI
 
Aprender CSS (UFCD0154) v2
Aprender CSS (UFCD0154) v2Aprender CSS (UFCD0154) v2
Aprender CSS (UFCD0154) v2
 
Aprender PHP e mySQL (UFCD0155)
Aprender PHP e mySQL (UFCD0155)Aprender PHP e mySQL (UFCD0155)
Aprender PHP e mySQL (UFCD0155)
 
Aprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCDAprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCD
 
Trabalhando com a infraestrutura como software na AWS com Elastic Beanstalk e...
Trabalhando com a infraestrutura como software na AWS com Elastic Beanstalk e...Trabalhando com a infraestrutura como software na AWS com Elastic Beanstalk e...
Trabalhando com a infraestrutura como software na AWS com Elastic Beanstalk e...
 
Escalando sua aplicação Web com Beanstalk
Escalando sua aplicação Web com BeanstalkEscalando sua aplicação Web com Beanstalk
Escalando sua aplicação Web com Beanstalk
 
Light Talk Docker Compose
Light Talk Docker ComposeLight Talk Docker Compose
Light Talk Docker Compose
 
Orquestrando Docker Containers: Machine, Swarm e Compose
Orquestrando Docker Containers: Machine, Swarm e ComposeOrquestrando Docker Containers: Machine, Swarm e Compose
Orquestrando Docker Containers: Machine, Swarm e Compose
 
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker ComposeScrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
 
TDC 2015 Floripa - Criando ambientes de forma simples com Docker e Ansible
TDC 2015 Floripa - Criando ambientes de forma simples com Docker e AnsibleTDC 2015 Floripa - Criando ambientes de forma simples com Docker e Ansible
TDC 2015 Floripa - Criando ambientes de forma simples com Docker e Ansible
 
Bluesoft - Sistema de Gestão - Apresentação Comercial
Bluesoft - Sistema de Gestão - Apresentação ComercialBluesoft - Sistema de Gestão - Apresentação Comercial
Bluesoft - Sistema de Gestão - Apresentação Comercial
 
VI congresso fecomercio de crimes eletrônicos 04082014 - apresentação de pa...
VI congresso fecomercio de crimes eletrônicos   04082014 - apresentação de pa...VI congresso fecomercio de crimes eletrônicos   04082014 - apresentação de pa...
VI congresso fecomercio de crimes eletrônicos 04082014 - apresentação de pa...
 
HACKING EDUCATION - A metodologia ensino-aprendizagem deve ser Hackeada
HACKING EDUCATION - A metodologia ensino-aprendizagem deve ser HackeadaHACKING EDUCATION - A metodologia ensino-aprendizagem deve ser Hackeada
HACKING EDUCATION - A metodologia ensino-aprendizagem deve ser Hackeada
 
Apresentação do Bluesoft ERP - Módulo Logístico
Apresentação do Bluesoft ERP - Módulo LogísticoApresentação do Bluesoft ERP - Módulo Logístico
Apresentação do Bluesoft ERP - Módulo Logístico
 
Apresentação do Bluesoft ERP - Módulo Contábil
Apresentação do Bluesoft ERP - Módulo ContábilApresentação do Bluesoft ERP - Módulo Contábil
Apresentação do Bluesoft ERP - Módulo Contábil
 
Apresentação do Bluesoft ERP - Módulo de CRM e DP
Apresentação do Bluesoft ERP - Módulo de CRM e DPApresentação do Bluesoft ERP - Módulo de CRM e DP
Apresentação do Bluesoft ERP - Módulo de CRM e DP
 

Ähnlich wie Processamento Assíncrono com PHP

Mini Curso Programação Paralela utilizando OpenMP - SACTA 2013
Mini Curso Programação Paralela utilizando OpenMP - SACTA 2013Mini Curso Programação Paralela utilizando OpenMP - SACTA 2013
Mini Curso Programação Paralela utilizando OpenMP - SACTA 2013Arthur Francisco Lorenzon
 
MiniCurso Programação Paralela com OpenMP - SACTA 2013
MiniCurso Programação Paralela com OpenMP - SACTA 2013MiniCurso Programação Paralela com OpenMP - SACTA 2013
MiniCurso Programação Paralela com OpenMP - SACTA 2013Arthur Francisco Lorenzon
 
Desenvolvendo Aplicações Web com Python
Desenvolvendo Aplicações Web com PythonDesenvolvendo Aplicações Web com Python
Desenvolvendo Aplicações Web com PythonLuiz Cláudio Silva
 
Frameworks: uma mão na roda para o desenvolvimento
Frameworks: uma mão na roda para o desenvolvimentoFrameworks: uma mão na roda para o desenvolvimento
Frameworks: uma mão na roda para o desenvolvimentoIago Santos Leão
 
Minicurso c++-see-2013
Minicurso c++-see-2013Minicurso c++-see-2013
Minicurso c++-see-2013Renan Prata
 
Do Windows para o Linux é mais fácil do que você imagina!
Do Windows para o Linux é mais fácil do que você imagina!Do Windows para o Linux é mais fácil do que você imagina!
Do Windows para o Linux é mais fácil do que você imagina!Gustavo Pereira
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011Evaldo Junior
 

Ähnlich wie Processamento Assíncrono com PHP (10)

Mini Curso Programação Paralela utilizando OpenMP - SACTA 2013
Mini Curso Programação Paralela utilizando OpenMP - SACTA 2013Mini Curso Programação Paralela utilizando OpenMP - SACTA 2013
Mini Curso Programação Paralela utilizando OpenMP - SACTA 2013
 
MiniCurso Programação Paralela com OpenMP - SACTA 2013
MiniCurso Programação Paralela com OpenMP - SACTA 2013MiniCurso Programação Paralela com OpenMP - SACTA 2013
MiniCurso Programação Paralela com OpenMP - SACTA 2013
 
PHP em Background
PHP em BackgroundPHP em Background
PHP em Background
 
Maquinas multinivel
Maquinas multinivelMaquinas multinivel
Maquinas multinivel
 
PHP: Como não programar em POG
PHP: Como não programar em POGPHP: Como não programar em POG
PHP: Como não programar em POG
 
Desenvolvendo Aplicações Web com Python
Desenvolvendo Aplicações Web com PythonDesenvolvendo Aplicações Web com Python
Desenvolvendo Aplicações Web com Python
 
Frameworks: uma mão na roda para o desenvolvimento
Frameworks: uma mão na roda para o desenvolvimentoFrameworks: uma mão na roda para o desenvolvimento
Frameworks: uma mão na roda para o desenvolvimento
 
Minicurso c++-see-2013
Minicurso c++-see-2013Minicurso c++-see-2013
Minicurso c++-see-2013
 
Do Windows para o Linux é mais fácil do que você imagina!
Do Windows para o Linux é mais fácil do que você imagina!Do Windows para o Linux é mais fácil do que você imagina!
Do Windows para o Linux é mais fácil do que você imagina!
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 

Processamento Assíncrono com PHP