Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHP Assíncrono com ReactPHP

Zizaco
May 07, 2015

PHP Assíncrono com ReactPHP

PHP vs Node.js

Talk Video (07/05/2015): http://youtu.be/yQxQM5Y-MpE

Leroy Merlin (Laravel)
http://zizaco.net
Luiz Fernando / Zizaco

Request Lifecycle
WebServer
PHP
File System
External Services
Cache

Laravel Request Lifecycle
WebServer
External Services
HTTP Kernel
Service Providers
autoload
Routes
Controller

Express Request Lifecycle
AppServer
Middlewares
Routes
Controller(?)

PHP Approach
PHP HTTP Server

IO Bloqueante
CPU

L1 cache reference
0.000001 ms
Main memory reference
0.0001 ms
Enviar 1 Kb por uma conexão 1 Gbps
0.010 ms
Disk seek
10 ms
Ler 1 MB do HD
20 ms
Round trip Brazil - EUA
150 ms

IO Não Bloqueante How to?
EventLoop & Reactor Pattern
EventLoop is a programming construct that waits for and dispatches events or messages in a program & The reactor design pattern is an event handling pattern ...

select | epoll
A system call to examine the status of file descriptors of open input/output channels. | A scalable I/O event notification mechanism

File-based EventLoop
The select and poll system calls allow a set of file descriptors to be monitored for a change of state, [...] by using files to trigger and listen to events, the loop will block if there are no events ready.

File-based EventLoop
The select and poll system calls allow a set of file descriptors to be monitored for a change of state, [...] by using files to trigger and listen to events, the loop will block if there are no events ready.

ReactPHP HTTP Server

Programando Event Driven
- The good
- The bad
- The ugly

Operações Bloqueantes
$result = syncAction($param1, $param2);

Operações não Bloqueantes
asyncAction($param1, $param2, Callable $callback);
Callback Hell
$promise = asyncAction($param1, $param2);
$promise->done(Callable $callback);

Packages/Libs
90% Bloqueantes
Packages/Libs não Bloqueantes
http://github.com/react/
packages for ReactPHP

ReactPHP's ChildProcess
Roda qualquer processo de forma assíncrona (EventDriven)
http://nodejs.org/api/child_process.html

Quando usar ReactPHP/Node?
Chat
APIs
Queued Input
Data Streaming
Proxy
Monitoring
Web Applications with NoSQL

Quando não usar ReactPHP/Node
Web Applications with Relational Database
Heavy Processing (CPU Intensive)

Node.js VS ReactPHP

Node.js
+ Packages / Libs
Javascript
Compatível com Front-end
+ Maduro

ReactPHP
OOP decente
PHP
Compatível com código Back-end
+ Padronizado

Remember
Don't do cargo cult programming

Trabalhe conosco (:
Backend / Frontend
Subject: [Vaga]

Fontes
ReactPHP
http://reactphp.org/
Why Use Node.js? - Tomislav Capan
http://www.toptal.com/nodejs/why-the-hell-would-i-use-node-js
Async PHP With React (Laracon) - Jeremy Mikola
https://www.youtube.com/watch?v=s6xrnYae1FU
Laravel Request Lifecycle
http://laravel.com/docs/5.0/lifecycle
Event Correlation: What you Need to Know For IT Operations Management - Michael Johnson
http://goo.gl/0bZFaP
Callback Hell - Max Ogden
http://callbackhell.com/
Understanding the node.js event loop - Mikito Takada
http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/
Promises - Forbes Lindesay
https://www.promisejs.org/
I/O não bloqueante com select “na unha” (Perl) - Tiago Peczenyj
http://imasters.com.br/desenvolvimento/io-nao-bloqueante-com-ioselect-na-unha/
Reactor Pattern - Douglas C. Schmidt
http://www.dre.vanderbilt.edu/~schmidt/PDF/reactor-siemens.pdf
Differences between event driven model and reactor pattern? - Jean-Paul Calderone
http://stackoverflow.com/a/9143390
Cargo Cult Programming
http://en.wikipedia.org/wiki/Cargo_cult_programming

Zizaco

May 07, 2015
Tweet

More Decks by Zizaco

Other Decks in Technology

Transcript

  1. Who am I? • Programador • Desenvolvedor web • WebDesigner

    wannabe • Leroy Merlin (Laravel) • Sempre mais http://zizaco.net Luiz Fernando / Zizaco
  2. IO Bloqueante L1 cache reference 0.000001 ms Main memory reference

    0.0001 ms Enviar 1 Kb por uma conexão 1 Gbps 0.010 ms Disk seek 10 ms Ler 1 MB do HD 20 ms Round trip Brazil - EUA 150 ms IO CPU IO CPU IO CPU
  3. IO Não Bloqueante How to? EventLoop & Reactor Pattern "EventLoop

    is a programming construct that waits for and dispatches events or messages in a program & The reactor design pattern is an event handling pattern ..."
  4. IO Não Bloqueante How to? select | epoll "A system

    call to examine the status of file descriptors of open input/output channels. | A scalable I/O event notification mechanism"
  5. IO Não Bloqueante How to? File-based EventLoop "The select and

    poll system calls allow a set of file descriptors to be monitored for a change of state, [...] by using files to trigger and listen to events, the loop will block if there are no events ready."
  6. IO Não Bloqueante How to? File-based EventLoop "The select and

    poll system calls allow a set of file descriptors to be monitored for a change of state, [...] by using files to trigger and listen to events, the loop will block if there are no events ready."
  7. Operações Bloqueantes Operações não Bloqueantes $result = syncAction($param1, $param2); asyncAction($param1,

    $param2, Callable $callback); $promise = asyncAction($param1, $param2); $promise->done(Callable $callback);
  8. Quando usar ReactPHP/Node? • Chat • APIs • Queued Input

    • Data Streaming • Proxy • Monitoring • Web Applications with NoSQL
  9. Node.js ReactPHP • + Packages / Libs • Javascript ◦

    Compatível com Front-end • + Maduro • OOP decente • PHP ◦ Compatível com código Back-end • + Padronizado
  10. Node.js ReactPHP • + Packages / Libs • Javascript ◦

    Compatível com Front-end • + Maduro • OOP decente • PHP ◦ Compatível com código Back-end • + Padronizado
  11. Fontes ReactPHP http://reactphp.org/ Why Use Node.js? - Tomislav Capan http://www.toptal.com/nodejs/why-the-hell-would-i-use-node-js

    Async PHP With React (Laracon) - Jeremy Mikola https://www.youtube.com/watch?v=s6xrnYae1FU Laravel Request Lifecycle http://laravel.com/docs/5.0/lifecycle Event Correlation: What you Need to Know For IT Operations Management - Michael Johnson http://goo.gl/0bZFaP Callback Hell - Max Ogden http://callbackhell.com/
  12. Fontes Understanding the node.js event loop - Mikito Takada http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/

    Promises - Forbes Lindesay https://www.promisejs.org/ I/O não bloqueante com select “na unha” (Perl) - Tiago Peczenyj http://imasters.com.br/desenvolvimento/io-nao-bloqueante-com-ioselect-na-unha/ Reactor Pattern - Douglas C. Schmidt http://www.dre.vanderbilt.edu/~schmidt/PDF/reactor-siemens.pdf Differences between event driven model and reactor pattern? - Jean-Paul Calderone http://stackoverflow.com/a/9143390 Cargo Cult Programming http://en.wikipedia.org/wiki/Cargo_cult_programming