O documento apresenta a biblioteca ReactPHP, que permite a implementação de I/O não-bloqueante em PHP através do padrão Reactor. Apresenta os componentes disponíveis na biblioteca e exemplos de uso, incluindo um servidor web simples, cliente HTTP e chat via telnet/netcat. Discute quando e por que usar a ReactPHP em vez de outras bibliotecas como Node.js.
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
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
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