Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ReactPHP - ktos cos?
Forum PHP.pl > Forum > PHP
nospor
Hejka, uzywa(l) ktos z was reactPhp i moze cos powiedziec na jego temat, jak sie zachowuje, czy warto itp? Z gory dzieki smile.gif

edit: pozwole sobie odswiezyc temat, bo spora czesc userow byla na phpcon, teraz wrocili, to moze nie zauwazyli tematu wink.gif
Pyton_000
Hahaha jaka sprora tongue.gif 2?3? biggrin.gif
nospor
A juz myslalem ze masz cos madrego do powiedzenia w temacie tongue.gif

Cytat
2?3?
No, czyli jakies 40% aktywnych userow na forum, calkiem sporo wink.gif
com
podpinam się pod pytanie, też bym się chętnie dowiedział jak się sprawdza w praktyce wink.gif
nospor
Ja dzisiaj ide na wykladzik o tym, wiec moze powiedza cos madrego smile.gif
Skie
Ja używałem dużo react PHP.
nospor
No dawaj, opisuj a nie sie tylko chwialisz smile.gif
Fajne to to, idzie do czegos uzyc?

ps: jak zobaczylem Twojego krakena to pomyslalem wlasnie o tobie w kontekscie react php smile.gif
Skie
Tak, ale żeby opisać czy też odpowiedzieć potrzebuję konkretnego pytania smile.gif ReactPHP to jest zbiór różnych asynchronicznych komponentów a nie jednolita technologia, i jedne działają lepiej, inne gorzej. Osobiście polecam zamianę komponentów Reacta na komponenty Krakena, gdyż dużo problemów jakie miał React udało mi się naprawić, a sam interfejs jest taki sam (+dodatkowe metody) lub bardzo zbliżony. Wiem, że to zalatuje na kilometr autoreklamą, no ale co poradzić, jeśli działają lepiej?

Reacta używałem w kilku projektach przy projektowaniu gier przeglądarkowych w PHP. React sam w sobie jest po prostu implementacją asynchronicznych obliczeń w PHP na pojedynczym wątku z wykorzystaniem programowania opartego o zdarzenia (event-driven development). Główna częścią tej technologii jest Evenement i Event-Loop. To pierwsze to jest implementacja klasycznego tandemu zdarzeniowego EventEmitter-EventListener w PHP, co pozwala na tworzenie loosely-coupled architecture, a drugie to kolejka zdarzeń. Cały React działa właśnie na bazie tego drugieg komponentu - pętli. Pętla w nieskończoność sprawdza czy istnieją do wykonania jakieś funkcje, timery oraz sprawdza czy są dane do zapisanai do strumieniu, a także czy do tych strumieni przyszły dane, które warto odczytać, a następnie je wykonuje.

Oprócz tych dwóch podstawowych modułów, wartym uwagi na pewno są jeszcze Promise, które jak nazwa wskazuje jest implementacją specyfikacji Promise/A+ w PHP, Promise-Timer który dodaje timeouty do nich oraz Stream implemetujący asynchroniczne strumienie.

Nie opłaca się korzystać z komponentów takich jak Socket, Http, Http-Client czy Datagram. Zamiast nich polecam wykorzystać bibliotekę Ratchet, która to wszystko ma lepiej zrobione i wciaż jest kompatybilne z Reactem. Ratchet to osobna biblioteka rozwijana przez tego samego autora co React.

Dużo komponentów obecnie też wymarło - chociażby Zmq - gdzie od ponad roku czekam na akceptację lub odrzucenie mojego pull requesta z fixami, co skończyło się z tym, że zaimplementowałem Zmq sam.

To teraz bardziej ogólnie. React jest stosunkowo prosty w użytkowaniu ze względu na to iż każdy webdeveloper miał styczność z programowanim opartym o zdarzenia w JS. Do tego jest bardzo wydajny, w PHP7 bijący nawet Node.js. Największe problemy Reacta to polegania na bibliotece Evenement, w której wycieka pamięć przy jednorazowych zdarzeniach i która już od dłuższego czasu nie jest rozwijana, a także fakt, że React nie posiada dobrego mechanizmu do rozpraszania obliczeń na wątki i procesy. Tak, istnieje child-process, ale to tylko potrafi spawnować nie-odizolowane procesy i korzystać z ich STDOUT i STDIN. I tutaj pojawia się pewna ironia - by w pełni wykorzystać Reacta, potrzeba używać wielu procesów, które React jako tako nie wspiera i całą ich logikę - wymiany informacji, łapania błędów, deployment i bootstrap programista musi sam zaimplementować. To dla mnie było największym problemem z pracą z Reactem. Sam React jest wydajny i w miarę stabilny, ale tak jak pisałem, wymaga dużo dodatkowego boilerplate'u.

Jak macie jakieś konkretne pytania , odpowiem na wszystkie.

EDIT:

Jeśli interesują was tego typu rozwiąznaia to oprócz React PHP i Kraken PHP istnieje jeszcze trzeci zestaw bibliotek asynchronicznych dla PHP - Icicle.io. Icicle jednak ma całkowicie inne podejście do asynchroniczności, oparte o trick z generatorami. Ich metoda sprawdza się lepiej w programowaniu współbieżnym*, ale jest trudniejsze do opanowania i ma poważne problemy z kompatybilnością z bibliotekami PHP, które nie bazują na generatorach.

* Mówiąc współbieżnie, mam na myśli parallel programming. Icicle świetnie sprawdza się do tego typu programowania, ale nie jest lepszy od Reacta w kontekście distributed i concurrent programmingu.

EDIT2 :

Dużo ciekawych informacji odnośnie Reacta zawarł na swoim blogu Wyrihaximus, który jest teraz jednym z najbardzije udzielających się contributorów Reacta.
viking
A powiedź mi. Benchmark który przedstawiasz na stronie co testował? I jak wygląda wydajność kiedy już trzeba połączyć się z BD?
nospor
Cytat
Osobiście polecam zamianę komponentów Reacta na komponenty Krakena, gdyż dużo problemów jakie miał React udało mi się naprawić, a sam interfejs jest taki sam (+dodatkowe metody) lub bardzo zbliżony. Wiem, że to zalatuje na kilometr autoreklamą, no ale co poradzić, jeśli działają lepiej?
No wlasnie jak dzisiaj przegladalem twoj kod Krakena to sie wlasnie zastanawialem ze to chyba konkurencja dla React.

Dziekuje ci bardzo za Twoja wypowiedz smile.gif Jak tylko ogarne troche czasu musze sie pobawic i w reacta i w krakena, bo temat mnie zainteresowal. Jak juz pisalem dzis ide na konferencje o react wiec moze bede mial jakis poczatek wiedzy by do tego usiasc na troche bardziej powaznie i pewnie potruje ci troche glowe wink.gif
Skie
@viking Ten wykres na stronie głównej Krakena przedstawia wydajność przy dostarczaniu strony HTML Hello World, czytanej z dysku z pliku hello.html. Jest to jedyne porównanie, które jestem w stanie wykonać w kwestii Kraken vs standardowe biblioteki PHP, ponieważ tylko ta funkcjonalność się pokrywa. W każdym przypadku testy przeprowadzane były z użyciem jednego procesu, za każdym razem plik czytany był z dysku bez cache, OPCache również było wyłączone. Więcej tego typu testów kontekście Reacta (który powinien mieć podobną lub trochę mniejszą wydajność) vs MVC można zobaczyć w projekcie PHP-PM.

Co do bazy danych to każdy zdemonizowany proces, nieważne czy to Kraken czy React czy Icicle zapewni Ci dużo lepszą wydajność, ponieważ możesz połączyć się z bazą raz zamiast każdorazowo przy każdym requeście. Ponadto możesz czytanie i zapisywanie do bazy zrobić również asynchronicznie, w kwestii niektórych danych, co jescze przyśpieszy całość. Problemem są tutaj ORMy - np Doctrine wycieka pamięć. W przypadku zdemonizowanych procesów w PHP polecam raczej wykorzystanie czystego PDO lub jakiegoś micro-ORM. Jeżeli bardzo potrzebujesz ORMów, to wtedy lepiej wydelegować połaćzenie z bazą do osobnego procesu, nasłuchiwać jego zużycie pamięci i restartować jak dojdzie do limitu, ale wtedy przyrosty wydajność w porównaniu do standardowego rozwiąania nie będzie aż tak widoczny.

@nospor Na pewno chcę konkurować z Reactem na poziomie komponentów, aczkolwiek w przeciwieństwie do Reacta, Kraken dodatkowo dostarcza cały Framework, w którym można zapisać aplikacę od stóp do głów, i nie trzeba się martwić, o to jak zaimplementować nadzorowanie procesów, komunikację między nimi itp. smile.gif Z chęcią odpowiem na wszystkie pytania, bo to pomoże mi w priorytezacji tasków na przyszłość.
nospor
Kraken dostarcza FW. A czy mozna uzywac tez Krakena tak jak react i podpiac pod to inny fw?
com
Skie Również dziękuje za odpowiedź, w wolnym czasie na pewno zerknę i po testuje wink.gif
Skie
@nospor Oczywiście, że można. Kraken jest trochę jak symfony pod tym względem - framework i repozytorium komponentów jednocześnie. Ponadto posiada on adaptery do Reacta, więc powinien byc kompatybilny z każdą asynchroniczną biblioteką, która działa na React.

cyt. "Kraken Framework is fully modular and each of its components can be used separately. If for some reason you don't want to download full application stack, you can require any of the [...] components"

Lista modułów dostępna jest w pliku README projektu na githubie, lub po prostu wchodząc na https://github.com/kraken-php .
nospor
Ok, juz po konferencji, troche sie zawiodlem, nie dowiedzialem sie nic wiecej niz sie dowiedzialem w necie przez ostatnie pare dni...

Nie mniej jednak pobawilem sie dzisiaj troche z reactem i zrobiltem troche testow. Przykladowo moja strona na react jest w stanie obsluzyc 80% wiecej requests niz bez react.
Takie symfony na react jest w stanie obsluzyc 3-4 razy wiecej requests niz bez react.

Czemu moja strona obsluguje tylko 80% wiecej a symfony az 400% wiecej? Symfony ma kobylasty bootrstap i tutaj react daje niezlego kopa. Moja strona nie ma takiej kobyly wiec i nie ma tu az tak duzego zysku.
No ale moja strona bez reacta jest w stanie osbluzyc 5 razy wiecej requests niz strona na symfony biggrin.gif

Tak czy siak react daje kopa.
Pozostaje jeszcze porownac to do krakena
Skie
Jak sprawdzisz rożnicę, to napisz tutaj na forum ile Ci się udało wycisnąć, bo sam będę ciekawy takich testów smile.gif
vokiel
Trochę w temacie. Ktoś korzystał, testował, porównywał http://sabre.io/event/loop/ ?
Skie
Sabre ma bardzo prymitywną pętlę zdarzeń. Praktycznie każde inne rozwiązanie na rynku sprawdzi się lepiej niż ich.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.