-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtopics
144 lines (106 loc) · 3.5 KB
/
topics
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
-- Tópicos --
Contexto 1: Objetivo Geral
Pergunta 1: Porque eu preciso saber isso?
Resposta rápida: Você não precisa...
Como tradicionalmente usamos o PHP?
Websites
API's
Sistemas Web
Laravel
Wordpress
O que o PHP é capaz de fazer hoje em dia?
Live Streamming
Games
Long Running Scripts
AI
Gateways
O programador como soluçionador de problemas!
Os Problemas e o Conhecimento
O Conhecimento e a Criatividade
A Criatividade e as Ferramentas
Resposta Complexa da Pergunta 1
Para obter Conhecimento sobre Ferramentas para ser capaz de atingir a Criatividade na solução de Problemas
Contexto 2: Didática Básica
Como construimos soluções com o PHP tradicionalmente?
Http Request Response Cicle - Server side processing
Cli - Scripting
Delegamos o Socket e HTTP response cycle para outras ferramentas
Execução Sincrona
Slide: fluxo de execução sincrona
Vantagens
Controle
Facilidade
Execução Assincrona
Slide: fluxo de execução assincrona
Vantagens
Eficiência
Concorrência e Paralelismo
Slide: Rodovia
Concorrência não é paralelismo!
Assincronismo e paralelismo dá match!
Parallel Native: https://github.com/spatie/async
Generators e Coroutines
O que são?
Porque que eu preciso saber isso?
Você não precisa...
Praticamente todos os frameworks de assincronismo fazem uso destas funções
Blocking IO
O que significa "Blocking" no contexto de aplicação?
Streams
Event Loop
Uma estrutura de programa, que continuamente testa por eventos externos, e executa ações quando eles acontecem
WebSockets
Protcolo de comunicação intensa de duas vias em tempo real
Conexão persistente, bidirecional, baseado em eventos
Comparação com HTTP
Ambos estão no camada 7 da OSI do TCP
É desenhado para funcionar sobre as 80 and 443 do HTTP
Também suporta proxyes e intermediários, o que o torna "compatível" com o protocolo HTTP.
Para ser compatível ele utiliza o HTTP Upgrade header e muda do protocolo HTTP para o WebSocket.
Contexto 3: Ferramentas e Exemplos
Processamento Assincrono
1: Traditional way
2: Ferramenta Generators
Processamento Paralelo
1: Traditional way
2: Ferramenta Spatie Async
Async Network I/O Http Request
1: Ferramenta Amp + Artax
Async Network I/O Database Query
1: Ferramenta ReactPHP
https://sergeyzhuk.me/2017/06/06/phpreact-event-loop/
Async code um pouco mais familiar?
1: Exemplo com ReactPHP
2: Mesmo exemplo usando Recoil
Async PHP WebServer (Não preciso mais do Nginx?)
1: Servidor embutido do PHP
2: Ferramenta Workerman
Async WebSocket Server e Gateway HTTP
1: Ferramenta Swoole
Mensão Honrosa
Para finalizar
Contexto 4: O que vem por ai?
Evoluindo o código
Assincronismo Orientado a Objetos?
O Paradigma Funcional?
Integrando Tecnologias
Laravel e Assincronismo?
Benchmarking
Ferramentas de Benchmarking?
Benchmarking em Websockets?
Comparação com outras linguagens?
-- Referências --
https://gnugat.github.io/2014/04/30/php-generators-and-coroutines.html
https://sergeyzhuk.me/tag/asyncphp/
-- Bibliotecas --
Amp - https://github.com/amphp/amp
Artax - https://github.com/amphp/artax
Recoil - https://github.com/recoilphp/recoil
Swoole - https://www.swoole.co.uk/
React PHP - https://reactphp.org/
-- Mensão Honrosa --
Ratchet - http://socketo.me/
Icicle - https://github.com/icicleio/icicle
-- Para Finalizar --
Spatie Async - https://github.com/spatie/async
Kraken - https://kraken-php.com/