SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Downloaden Sie, um offline zu lesen
Przetwarzanie
Asynchroniczne i Promises w
Laravel
Krzysztof Czechowski
Head of Technology
krzysztof.czechowski@b-mind.pl
Agenda
1. Wprowadzenie
2. Laravel w ReactPHP
3. Front-end promise?
4. Demko
5. Podsumowanie
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?
Wprowadzenie - Powtórka
Na czym ostatnio skończyliśmy?
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?
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?
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.
Laravel w ReactPHP
Laravel w ReactPHP
Laravel w ReactPHP
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
Czym to połączyć?
Czym to połączyć?
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.
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.
Promise w ReactPHP
Promise
zadanie success failure
.then(successFunction, errorFunction)
.then(successFunction, errorFunction)
Promise w ReactPHP
Promise i implementacja w PHP
Synchronicznie Asynchronicznie
dokumentacja: https://github.com/reactphp/promise
Promise w ReactPHP
Jak w tym nie zginąć?
Przygotować ustrukturyzowane odpowiedzi przekazywane we
wnętrzu Promise:
• SuccessResolve
• RejectResolve
• ExceptionResolve
SuccessResolve
RejectResolve
ExceptonResolve
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!
Jak do tego doszło?
Jak do tego doszło?
Jak do tego doszło?
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
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
Zakończeni
Repozytoria
• część pierwsza:
• https://github.com/kczchowski/laravel_tcpip_demo
• część druga
• https://github.com/kczchowski/laravel_promises
Pytania?
krzysztof.czechowski@b-mind.pl
Krzysztof Czechowski

Weitere ähnliche Inhalte

Ähnlich wie Przetwarzanie Asynchroniczne i Promises w Laravel

Ähnlich wie Przetwarzanie Asynchroniczne i Promises w Laravel (20)

university day 1
university day 1university day 1
university day 1
 
CI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieCI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecie
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowych
 
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketwAsynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
 
Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...
Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...
Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...
 
integracja danych przesyłanych za pomocą Web-Socketów na przykladie bibliote...
integracja danych przesyłanych za pomocą Web-Socketów na przykladie bibliote...integracja danych przesyłanych za pomocą Web-Socketów na przykladie bibliote...
integracja danych przesyłanych za pomocą Web-Socketów na przykladie bibliote...
 
Wzorce Repository, Unity of Work, Devexpress MVC w architekturze Asp.net MVC
Wzorce Repository, Unity of Work, Devexpress MVC  w architekturze Asp.net MVCWzorce Repository, Unity of Work, Devexpress MVC  w architekturze Asp.net MVC
Wzorce Repository, Unity of Work, Devexpress MVC w architekturze Asp.net MVC
 
Cykl życia zapytania HTTP (pod maską)
Cykl życia zapytania HTTP (pod maską)Cykl życia zapytania HTTP (pod maską)
Cykl życia zapytania HTTP (pod maską)
 
Testowanie na 101 sposobów
Testowanie na 101 sposobówTestowanie na 101 sposobów
Testowanie na 101 sposobów
 
4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...
4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...
4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...
 
Od zera do Automattica
Od zera do AutomatticaOd zera do Automattica
Od zera do Automattica
 
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLAutomatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
 
Confitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ AllegroConfitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ Allegro
 
Dictionary of Programming (Coding)
Dictionary of Programming (Coding)Dictionary of Programming (Coding)
Dictionary of Programming (Coding)
 
[Quality Meetup#12] P. Podsiadlik, R. Peroń - Testy regresji z perspektywy pi...
[Quality Meetup#12] P. Podsiadlik, R. Peroń - Testy regresji z perspektywy pi...[Quality Meetup#12] P. Podsiadlik, R. Peroń - Testy regresji z perspektywy pi...
[Quality Meetup#12] P. Podsiadlik, R. Peroń - Testy regresji z perspektywy pi...
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatyczny
 
Jak stworzyliśmy system kudosów w Laravelu i Slacku
Jak stworzyliśmy system kudosów w Laravelu i SlackuJak stworzyliśmy system kudosów w Laravelu i Slacku
Jak stworzyliśmy system kudosów w Laravelu i Slacku
 
Laravel 6.0 - co nowego?
Laravel 6.0 - co nowego?Laravel 6.0 - co nowego?
Laravel 6.0 - co nowego?
 
[PL] PRUG Luty 2022 - Service objecty to za mało - jak żyć z Railsami?
[PL] PRUG Luty 2022 - Service objecty to za mało - jak żyć z Railsami?[PL] PRUG Luty 2022 - Service objecty to za mało - jak żyć z Railsami?
[PL] PRUG Luty 2022 - Service objecty to za mało - jak żyć z Railsami?
 
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPJak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
 

Mehr von Laravel Poland MeetUp

Mehr von Laravel Poland MeetUp (20)

WebRTC+Websockety - Jak stworzyłem aplikację do kamerek internetowych w Larav...
WebRTC+Websockety - Jak stworzyłem aplikację do kamerek internetowych w Larav...WebRTC+Websockety - Jak stworzyłem aplikację do kamerek internetowych w Larav...
WebRTC+Websockety - Jak stworzyłem aplikację do kamerek internetowych w Larav...
 
xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
xD bug - Jak debugować PHP-owe aplikacje (Xdebug) xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
 
Kilka slajdów o castowaniu atrybutów w Eloquent
Kilka slajdów o castowaniu atrybutów w EloquentKilka slajdów o castowaniu atrybutów w Eloquent
Kilka slajdów o castowaniu atrybutów w Eloquent
 
Licencje otwartego oprogramowania
Licencje otwartego oprogramowaniaLicencje otwartego oprogramowania
Licencje otwartego oprogramowania
 
Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przyspieszyłem aplikację produkcyjną o ponad 40%Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przyspieszyłem aplikację produkcyjną o ponad 40%
 
Jak przemycić Shape Up do Scruma?
Jak przemycić Shape Up do Scruma?Jak przemycić Shape Up do Scruma?
Jak przemycić Shape Up do Scruma?
 
Enumy w Laravelu - dlaczego warto stosować?
Enumy w Laravelu - dlaczego warto stosować?Enumy w Laravelu - dlaczego warto stosować?
Enumy w Laravelu - dlaczego warto stosować?
 
Laravelowe paczki do uwierzytelniania
Laravelowe paczki do uwierzytelnianiaLaravelowe paczki do uwierzytelniania
Laravelowe paczki do uwierzytelniania
 
Przegląd najciekawszych wtyczek do Laravela
Przegląd najciekawszych wtyczek do LaravelaPrzegląd najciekawszych wtyczek do Laravela
Przegląd najciekawszych wtyczek do Laravela
 
Walidacja w Laravelu
Walidacja w LaraveluWalidacja w Laravelu
Walidacja w Laravelu
 
(prawie) Wszystko o Tinkerze
(prawie) Wszystko o Tinkerze(prawie) Wszystko o Tinkerze
(prawie) Wszystko o Tinkerze
 
Laravel Dusk - prosty przepis na testy E2E
Laravel Dusk - prosty przepis na testy E2ELaravel Dusk - prosty przepis na testy E2E
Laravel Dusk - prosty przepis na testy E2E
 
Laravel Octane - czy na pewno taki szybki?
Laravel Octane - czy na pewno taki szybki?Laravel Octane - czy na pewno taki szybki?
Laravel Octane - czy na pewno taki szybki?
 
Laravel Jobs i PHP8
Laravel Jobs i PHP8Laravel Jobs i PHP8
Laravel Jobs i PHP8
 
Wszystko o Laravel Livewire
Wszystko o Laravel Livewire Wszystko o Laravel Livewire
Wszystko o Laravel Livewire
 
Laravel/PHP - zderzenie z PDFami
Laravel/PHP - zderzenie z PDFamiLaravel/PHP - zderzenie z PDFami
Laravel/PHP - zderzenie z PDFami
 
Action-based Laravel
Action-based LaravelAction-based Laravel
Action-based Laravel
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHP
 
Wstęp do Gitlab CI/CD w aplikacjach napisanych w Laravel
Wstęp do Gitlab CI/CD w aplikacjach napisanych w LaravelWstęp do Gitlab CI/CD w aplikacjach napisanych w Laravel
Wstęp do Gitlab CI/CD w aplikacjach napisanych w Laravel
 
Laravel Collection - tablice na sterydach
Laravel Collection - tablice na sterydachLaravel Collection - tablice na sterydach
Laravel Collection - tablice na sterydach
 

Przetwarzanie Asynchroniczne i Promises w Laravel