4. Wprowadzenie - Powtórka
• Duże ilości napływających danych równocześnie
• Konieczność utrzymania połączenia z wieloma klientami
• Broadcasting i websockets
• Internet of Things
• Intensywne operacje na systemie plików (jeszcze nie w PHP)
Gdzie i kiedy przetwarzać asynchronicznie?
7. Wprowadzenie - Powtórka
Nasz przykładowy serwer potrafi utrzymywać wiele aktywnych
połączeń TCP/IP. Potrafi reagować na dane które do niego docierają,
oraz na nie odpisać w określonym formacie który definiuje protokół.
Od czego zaczynamy?
8. Wprowadzenie - Powtórka
• Możliwości wysłania pakietu do klienta
• Możliwości śledzenia reakcji klienta na taki pakiet
• Oczekiwania na odpowiedź od klienta
Czego nam brakuje?
9. Laravel w ReactPHP
ReactPHP + PSR7 + Laravel
Za pomocą tej trójcy istnieje możliwość uruchomienia w ramach
ReactPHP wątku w którym żyje cały (lub nie) Laravel. Pozwala to
nam na wykorzystanie tych samych klas i komunikację pomiędzy
poszczególnymi elementami.
13. Laravel w ReactPHP
Klasa ConnectionPool
Pozwala na:
• dodawanie i monitorowanie połączeń z poziomu wątku
nasłuchującego na połączenia TCP/IP
• komunikację z nimi z poziomu Laravela
• tworzona jako instancja przez konteneryzacje
16. Laravel w ReactPHP
Dalej coś "nie gra"
Taka implementacja pozwala na komunikację w jedną i drugą
stronę, lecz nie umożliwia oczekiwania na odpowiedź. Oczekujemy
odpowiedzi np. ze stanem klienta po wykonaniu całej operacji, a nie
tylko potwierdzenia wysłania rozkazu.
17. Promise w ReactPHP
Promise
Łatwe do zrozumienia jako obietnica wykonania. Jest rezultatem
operacji która jeszcze się nie wykonała, ale do niej dojdzie w
nieokreślonej przyszłości. Dobrym przykładem jest komunikacja -
nie potrafimy powiedzieć kiedy klient nam odpowie.
19. Promise w ReactPHP
Promise i implementacja w PHP
Synchronicznie Asynchronicznie
dokumentacja: https://github.com/reactphp/promise
20. Promise w ReactPHP
Jak w tym nie zginąć?
Przygotować ustrukturyzowane odpowiedzi przekazywane we
wnętrzu Promise:
• SuccessResolve
• RejectResolve
• ExceptionResolve
25. Laravel w ReactPHP
Lepiej!
Po implementacji Promise oraz Timer, do naszego projektu,
jesteśmy w stanie wygenerować odpowiedź dopiero wtedy kiedy ją
sami otrzymamy. O to nam chodziło!
29. Podsumowanie
1. Pozwala łatwo zweryfikować założenia
2. Relatywnie łatwo skalowalne
3. Niski próg wejścia
4. Ograniczone wymagania co do hostingu
5. Coś innego niż sztampowe aplikacje CRUD
Zalety rozwiązania
30. Podsumowanie
1. Skomplikowany i nietypowy kod aplikacji
2. Podatność na błędy
3. Problematyczny rozwój oprogramowania
4. Każda zmiana wymaga restartu wątku
5. Wymagana rozwaga przy dobieraniu elementów framework'a
6. Rozwiązania w innych językach są finalni wydajniejsze
Wady