SlideShare una empresa de Scribd logo
1 de 22
ADLER MEDRADO
FRANCISCO BELTRÃO – ABRIL - 2014
Apresentação
● Programador, Arquiteto de Software,
Consultor, Instrutor, DevOps
● ZCE PHP 5, PHP 5.3, Zend Framework
● Co-Fundador PHP-DF
● Sempre que possível participo de eventos
Do que se trata esta palestra?
Como o PHP (e a maioria das
linguagens para web) funcionam ?
• Request / Response
• Para cada requisição, uma nova thread é criada
• Se houver conexão com banco de dados ou outro tipo de interação
com I/O, esta operação é realizada antes de ser feito o response
Blocking I/O
Non-Blocking I/O
Outras linguagens tinham sua
implementação de “non-blocking
I/O”. Menos o PHP.
EventMachine
Akka I/O
Até agora
http://reactphp.org
O que é o ReactPHP
● É uma biblioteca PHP, de baixo nível, para
desenvolvimento baseado em eventos.
● É facilmente extensível, ou seja, você pode
criar seus componentes com base nos
componentes existentes no ReactPHP
● Implementa non-blocking I/O
● Inspirado em bibliotecas como Twisted, Event
Machine e Node.js
Reactor Pattern - Vantagens
● Design Pattern para manipulação de eventos
● Sistemas baseados no Reactor Pattern
normalmente são single-threaded
● Separa código específico de aplicação do da
implementação do reactor
● Oferece maior capacidade para concorrência
da aplicação sem adicionar a complexidade do
uso de multi-threading
Reactor Pattern - Limitações
● É mais difícil de debugar do que uma aplicação
'convencional'
● No caso do ReactPHP e Node.js (as únicas
que já trabalhei) é necessário reiniciar o
servidor em caso de Exceptions.
http://en.wikipedia.org/wiki/Reactor_pattern
Event Loop
● O Core é um event-loop, que provê
funcionalidades de baixo nível como abstração
de streams e sockets.
● O Event Loop é a implementação do design
pattern Reactor
● Permite que o programa seja executado por
uma grande quantidade de tempo
Componentes Disponíveis
● Cache Component
●
Child Process Component
● Dns Component
●
EventLoop
●
Http
●
HttpClient
●
Socket
●
SocketClient
●
Stream
● Promises
Quais tipos de situações em que o
ReactPHP pode ser usado?
● Queue
● Comunicações
● Transferência de arquivos
● Implementação de funcionalidades que são
executadas como “cronjobs”
● Etc.
Por que usar ReactPHP se já
existem bibliotecas consolidadas
como node.js ?
● Você já possui uma grande base de código
PHP existente?
● Nem todos os servidores disponibilizam o
node.js
● Você domina PHP? Diga-me um porquê para
trocar o certo pelo duvidoso
Instalação
http://getcomposer.org
{
"require": {
"react/react": "0.5.*@dev"
}
}
Exemplo 1:
Web Server Simples
Exemplo 2:
Simples HTTP Client
Exemplo 3:
Chat – Telnet / Netcat
Bindings e Projetos baseados no
ReactPHP
'
PHP-AR-DRONE
Ratchet – Websockets Server
Redis Client
DNODE Bindings
ZeroMQ
Perguntas ?
Obrigado e até a próxima
● http://adlermedrado.com.br
● @adlermedrado
● http://github.com/adlermedrado

Más contenido relacionado

La actualidad más candente

Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado ServidorMario Guedes
 
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISCCriando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISCFlávio Lisboa
 
Integrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSONIntegrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSONMario Guedes
 
Desenvolvendo Aplicações com Zend Framework
Desenvolvendo Aplicações com Zend FrameworkDesenvolvendo Aplicações com Zend Framework
Desenvolvendo Aplicações com Zend FrameworkDomingos Teruel
 
Prepare-se para o próximo estágio da evolução PHP
Prepare-se para o próximo estágio da evolução PHPPrepare-se para o próximo estágio da evolução PHP
Prepare-se para o próximo estágio da evolução PHPRaphael Almeida
 
Unit Test JavaScript
Unit Test JavaScriptUnit Test JavaScript
Unit Test JavaScriptDan Vitoriano
 
9 erros que desenvolvedores Node.js cometem
9 erros que desenvolvedores Node.js cometem9 erros que desenvolvedores Node.js cometem
9 erros que desenvolvedores Node.js cometemFernando Henriques
 
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endModularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endMario Guedes
 
Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática Mario Guedes
 
Code Rage Brazil III - Tudo sobre o REST Client Library
Code Rage Brazil III - Tudo sobre o REST Client LibraryCode Rage Brazil III - Tudo sobre o REST Client Library
Code Rage Brazil III - Tudo sobre o REST Client LibraryMario Guedes
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panosLaís Lima
 
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvensDrupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvensPaulino Michelazzo
 
Testes com javascript
Testes com javascriptTestes com javascript
Testes com javascriptLaís Lima
 
WordCamp SP 2019 - PeachPie unindo Php com C# .Net Core
WordCamp SP 2019 - PeachPie unindo Php com C# .Net CoreWordCamp SP 2019 - PeachPie unindo Php com C# .Net Core
WordCamp SP 2019 - PeachPie unindo Php com C# .Net CoreVanessa Valle
 
Oficina de PHP - Software Freedom Day Luziânia 2013
Oficina de PHP - Software Freedom Day Luziânia 2013Oficina de PHP - Software Freedom Day Luziânia 2013
Oficina de PHP - Software Freedom Day Luziânia 2013George Mendonça
 
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.Filipe Morelli
 

La actualidad más candente (20)

Zend Framework
Zend FrameworkZend Framework
Zend Framework
 
Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado Servidor
 
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISCCriando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
 
Integrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSONIntegrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSON
 
Desenvolvendo Aplicações com Zend Framework
Desenvolvendo Aplicações com Zend FrameworkDesenvolvendo Aplicações com Zend Framework
Desenvolvendo Aplicações com Zend Framework
 
Webinar php extreme 5.3
Webinar php extreme 5.3Webinar php extreme 5.3
Webinar php extreme 5.3
 
Prepare-se para o próximo estágio da evolução PHP
Prepare-se para o próximo estágio da evolução PHPPrepare-se para o próximo estágio da evolução PHP
Prepare-se para o próximo estágio da evolução PHP
 
Unit Test JavaScript
Unit Test JavaScriptUnit Test JavaScript
Unit Test JavaScript
 
9 erros que desenvolvedores Node.js cometem
9 erros que desenvolvedores Node.js cometem9 erros que desenvolvedores Node.js cometem
9 erros que desenvolvedores Node.js cometem
 
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endModularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
 
Jugvale
JugvaleJugvale
Jugvale
 
Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática
 
Code Rage Brazil III - Tudo sobre o REST Client Library
Code Rage Brazil III - Tudo sobre o REST Client LibraryCode Rage Brazil III - Tudo sobre o REST Client Library
Code Rage Brazil III - Tudo sobre o REST Client Library
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
 
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvensDrupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
 
PHP Além da universidade
PHP Além da universidadePHP Além da universidade
PHP Além da universidade
 
Testes com javascript
Testes com javascriptTestes com javascript
Testes com javascript
 
WordCamp SP 2019 - PeachPie unindo Php com C# .Net Core
WordCamp SP 2019 - PeachPie unindo Php com C# .Net CoreWordCamp SP 2019 - PeachPie unindo Php com C# .Net Core
WordCamp SP 2019 - PeachPie unindo Php com C# .Net Core
 
Oficina de PHP - Software Freedom Day Luziânia 2013
Oficina de PHP - Software Freedom Day Luziânia 2013Oficina de PHP - Software Freedom Day Luziânia 2013
Oficina de PHP - Software Freedom Day Luziânia 2013
 
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.
 

Destacado

Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com AjaxAdler Medrado
 
Web 2.0 e RIA com PHP
Web 2.0 e RIA com PHPWeb 2.0 e RIA com PHP
Web 2.0 e RIA com PHPAdler Medrado
 
Não é Feitiçaria, é Tecnologia
Não é Feitiçaria, é TecnologiaNão é Feitiçaria, é Tecnologia
Não é Feitiçaria, é TecnologiaAdler Medrado
 

Destacado (6)

Mercado de Trabalho
Mercado de TrabalhoMercado de Trabalho
Mercado de Trabalho
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com Ajax
 
Webservices
WebservicesWebservices
Webservices
 
Tales of the Crypto
Tales of the CryptoTales of the Crypto
Tales of the Crypto
 
Web 2.0 e RIA com PHP
Web 2.0 e RIA com PHPWeb 2.0 e RIA com PHP
Web 2.0 e RIA com PHP
 
Não é Feitiçaria, é Tecnologia
Não é Feitiçaria, é TecnologiaNão é Feitiçaria, é Tecnologia
Não é Feitiçaria, é Tecnologia
 

Similar a Phpreact flisol-fb-2014

Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoEduardo Bohrer
 
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
 
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
 
Painel HHVM, Zephir, PHPNG
Painel HHVM, Zephir, PHPNGPainel HHVM, Zephir, PHPNG
Painel HHVM, Zephir, PHPNGiMasters
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011Evaldo Junior
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHPFelipe Ribeiro
 
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando PimentaIniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando Pimentamichel adriano medeiros
 
Construir microservices em python nunca foi tão simples como com o Nameko!
Construir microservices em python nunca foi tão simples como com o Nameko!Construir microservices em python nunca foi tão simples como com o Nameko!
Construir microservices em python nunca foi tão simples como com o Nameko!Flávio Pimenta
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDouglas V. Pasqua
 
Nodejs justdigital
Nodejs justdigitalNodejs justdigital
Nodejs justdigitalJust Digital
 
Como definir a quantidade de workers para sua aplicação
Como definir a quantidade de workers para sua aplicaçãoComo definir a quantidade de workers para sua aplicação
Como definir a quantidade de workers para sua aplicaçãoWeverton Timoteo
 
FISL12. Web Services e Computação em Nuvem com PHP
FISL12. Web Services e Computação em Nuvem com PHPFISL12. Web Services e Computação em Nuvem com PHP
FISL12. Web Services e Computação em Nuvem com PHPFlávio Lisboa
 
Integração contínua com Jenkins
Integração contínua com JenkinsIntegração contínua com Jenkins
Integração contínua com JenkinsAécio Pires
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...Renato Groff
 

Similar a Phpreact flisol-fb-2014 (20)

Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançado
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011
 
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
 
Painel HHVM, Zephir, PHPNG
Painel HHVM, Zephir, PHPNGPainel HHVM, Zephir, PHPNG
Painel HHVM, Zephir, PHPNG
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando PimentaIniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
 
Construir microservices em python nunca foi tão simples como com o Nameko!
Construir microservices em python nunca foi tão simples como com o Nameko!Construir microservices em python nunca foi tão simples como com o Nameko!
Construir microservices em python nunca foi tão simples como com o Nameko!
 
Node js - Javascript Server Side
Node js - Javascript Server SideNode js - Javascript Server Side
Node js - Javascript Server Side
 
Django
DjangoDjango
Django
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
 
Fundamentos Java - 01
Fundamentos Java - 01Fundamentos Java - 01
Fundamentos Java - 01
 
Aula 1a.ppt
Aula 1a.pptAula 1a.ppt
Aula 1a.ppt
 
Nodejs justdigital
Nodejs justdigitalNodejs justdigital
Nodejs justdigital
 
De 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuáriosDe 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuários
 
Como definir a quantidade de workers para sua aplicação
Como definir a quantidade de workers para sua aplicaçãoComo definir a quantidade de workers para sua aplicação
Como definir a quantidade de workers para sua aplicação
 
Manual PHP
Manual PHPManual PHP
Manual PHP
 
FISL12. Web Services e Computação em Nuvem com PHP
FISL12. Web Services e Computação em Nuvem com PHPFISL12. Web Services e Computação em Nuvem com PHP
FISL12. Web Services e Computação em Nuvem com PHP
 
Integração contínua com Jenkins
Integração contínua com JenkinsIntegração contínua com Jenkins
Integração contínua com Jenkins
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
 

Phpreact flisol-fb-2014

  • 2. Apresentação ● Programador, Arquiteto de Software, Consultor, Instrutor, DevOps ● ZCE PHP 5, PHP 5.3, Zend Framework ● Co-Fundador PHP-DF ● Sempre que possível participo de eventos
  • 3. Do que se trata esta palestra?
  • 4. Como o PHP (e a maioria das linguagens para web) funcionam ? • Request / Response • Para cada requisição, uma nova thread é criada • Se houver conexão com banco de dados ou outro tipo de interação com I/O, esta operação é realizada antes de ser feito o response
  • 7. Outras linguagens tinham sua implementação de “non-blocking I/O”. Menos o PHP. EventMachine Akka I/O
  • 9. O que é o ReactPHP ● É uma biblioteca PHP, de baixo nível, para desenvolvimento baseado em eventos. ● É facilmente extensível, ou seja, você pode criar seus componentes com base nos componentes existentes no ReactPHP ● Implementa non-blocking I/O ● Inspirado em bibliotecas como Twisted, Event Machine e Node.js
  • 10. Reactor Pattern - Vantagens ● Design Pattern para manipulação de eventos ● Sistemas baseados no Reactor Pattern normalmente são single-threaded ● Separa código específico de aplicação do da implementação do reactor ● Oferece maior capacidade para concorrência da aplicação sem adicionar a complexidade do uso de multi-threading
  • 11. Reactor Pattern - Limitações ● É mais difícil de debugar do que uma aplicação 'convencional' ● No caso do ReactPHP e Node.js (as únicas que já trabalhei) é necessário reiniciar o servidor em caso de Exceptions. http://en.wikipedia.org/wiki/Reactor_pattern
  • 12. Event Loop ● O Core é um event-loop, que provê funcionalidades de baixo nível como abstração de streams e sockets. ● O Event Loop é a implementação do design pattern Reactor ● Permite que o programa seja executado por uma grande quantidade de tempo
  • 13. Componentes Disponíveis ● Cache Component ● Child Process Component ● Dns Component ● EventLoop ● Http ● HttpClient ● Socket ● SocketClient ● Stream ● Promises
  • 14. Quais tipos de situações em que o ReactPHP pode ser usado? ● Queue ● Comunicações ● Transferência de arquivos ● Implementação de funcionalidades que são executadas como “cronjobs” ● Etc.
  • 15. Por que usar ReactPHP se já existem bibliotecas consolidadas como node.js ? ● Você já possui uma grande base de código PHP existente? ● Nem todos os servidores disponibilizam o node.js ● Você domina PHP? Diga-me um porquê para trocar o certo pelo duvidoso
  • 19. Exemplo 3: Chat – Telnet / Netcat
  • 20. Bindings e Projetos baseados no ReactPHP ' PHP-AR-DRONE Ratchet – Websockets Server Redis Client DNODE Bindings ZeroMQ
  • 22. Obrigado e até a próxima ● http://adlermedrado.com.br ● @adlermedrado ● http://github.com/adlermedrado