Feature-request: Propojení Nette a ReactPHP

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
2bfree
Člen | 248
+
-1
-

Chtěl bych Nette jako základ pro microservice worker, tedy něco co poběží jako proces na serveru, který bude přijímat requesty a odpovídat na ně, aniž by to pokaždé umřelo.

Vytvořili jsme jednoduché react jádro a poněkud neohrabaně využíváme jednotlivých komponent z Nette. Potkali jsme jeden starší projekt, který se to pokusil udělat systémově, ale už je dost starý: https://github.com/…/nette-react

Dotaz zní, co si o možnosti propojení Nette+React myslí sám @DavidGrudl a kolik by přípdně stál vývoj této feature?

2bfree
Člen | 248
+
0
-

Takhle to s tou placenou verzí Nette moc nevypadá :)

newPOPE
Člen | 648
+
0
-

Je tu este toto: https://github.com/…e/swoole-src keby si chcel vyskusat…

2bfree
Člen | 248
+
0
-

Díky za tip. :)

martinox
Člen | 10
+
-17
-

Propojení Nette a Reactu mi připomíná tu závěrečnou scénu z Back to The Future 3, kde profesor zabudoval stroj času do parní lokomotivy.

Ano, asi to jde. Ale jaký masochismus k tomu vede, je mi záhadou.

bazo
Člen | 620
+
0
-

k comu to potrebujes prepojit na urovni nette? nacitaj si di container v react loope a tam si pories co treba

presentery a komponenty s reactom asi nebudu velmi kamaratit

2bfree
Člen | 248
+
0
-

Rád bych zachoval myšlenku, jakou funguje Nette, tedy v React loop vzal object typu React\Request a React\Response a ty předal do Nette a nchal dále zpracovat standardní cestou. Presenter vrstva by se následně měla postarat o decode/encode z JSON, MsgPack, … postarat o autentizaci a autorizaci etc.

David Grudl
Nette Core | 8282
+
0
-

@2bfree: ad https://twitter.com/…552370638848
Tohle jsem fakt nepochopil jako poptávku po práci, kterou ti mám nacenit. Je to moc hrubé zadání, spíš jen nástřel nápadu, kterému úplně nerozumím.

2bfree
Člen | 248
+
0
-

Principielně jde o to, že se v současné době se při každém requestu na serveru, kde běží aplikace v Nette, musí celá aplikace sestavit, aby obsloužila požadavek a následně se uvolnila z paměti a tak stále dokola.

V případě problematiky microservice se pracuje s velkým množstvím opravdu jednoduchých requestů s tím, že čas zmíněný výše převyšuje čas potřebný pro získání samotného výsledku.

reactphp umí běžet jako služba na pozadí, přijímat requesty a odpovídat na ně aniž by se musela celá aplikace stále sestavovat. Díky tomu lze ušetřit více jak 50% času potřebného na zpracování požadavku a to není málo, zvlášť při větší zátěži.

V současné době Nette při svěm běhu sestaví objeky Request a Response na základě dat od serveru a tyto předává do Routeru a začíná celé aplikační flow.

Když by se objekty Request a Response naplnily daty z reactphp tak by to IMHO mělo vyřešit celý problém.

Tedy na serveru bych spustil službu přes /usr/bin/php ~/www/service/www/react-index.php a nasměroval nginx na tuto service.

O něco podobného se již snažilo dříve, ale žel vývoj ustal.

Dotaz tedy zní, co si o tom @DavidGrudl myslí a kolik by případně stál tento vývoj?

mkoubik
Člen | 728
+
+1
-

Používáme react v rohlik.cz na naseptavac a nette/http k tomu nepotrebujeme. Sami si rozparsujeme http request a posleme JSON, ale DI container se sestavuje jen jednou pri startu apod.

David Grudl
Nette Core | 8282
+
0
-

A proč je tam nutné Nette? Respektive chápal bych, že server bude posílat nějaké JSON response, což umí ReactPHP sám o sobě, ne?

Předělat presenter & application na ReactPHP by asi šlo, ale nevidím v tom tu přidanou hodnotu. Odhadovat náklady si netroufám.

Filip Procházka
Moderator | 4668
+
+1
-

Nevidím důvod dávat to do Nette. Ovšem je to výborný argument zamyslet se nad předěláním Http\Response na value object a ne službu. Stejně jako jsem předělal https://github.com/…RequestStack. App\Request a response ti zkrátka stačit nebudou, bude potřeba vyřešit minimálně i Http\Request, Http\Response a Http\Session.

Ovšem i tohle jsou věci, které je úplně v pohodě možné udělat bez zásahu do Nette. Tady máš hodně hrubý nástřel https://github.com/…rver-sandbox

Tharos
Člen | 1030
+
0
-

Ale no tak… Zas tak špatný ten React přece není, ne? ;)

David Grudl
Nette Core | 8282
+
0
-

On nejspíš @martinox netuší, jaký je rozdíl mezi Facebook React a ReactPHP.

David Matějka
Moderator | 6445
+
0
-

mimochodem, i react od fb je integrovany do php :D https://github.com/…act-php-v8js (ale to uz tak trochu masochismus je, no..)

2bfree
Člen | 248
+
0
-

Přidané hodnoty Nette jsou:

  • Presenter vrstvoa, která již teď umí přijmout vstupní parametry v libovolném pořadí a zavolat příslušnou metodu, které předá potřebné parametry ->tryCall()
  • DI
  • snadné propojení s Doctrine
  • Autorizace & Autentizace
  • Podpora pro eventy

Ačkoliv se bavíme o „microservice“, je to pořád celkem komplexní úkol.

Nejde však jen o tento use-case. Jakmile by byl vytvořen plnohodnotný react spouštěč, tak by se i běžné Nette aplikace mohli spouštět takto a přidaná hodnota by byla v rychlosti.

2bfree
Člen | 248
+
0
-

Od té doby, co je Nette „Dev stack“, tak by to byl jen další „Modul“ a bylo by na tobě, jestli si to stáhneš nebo ne. Jinak máš pravdu, že jedna z věcí na kterou jsme narazili byla v tom, že tebou zmíněné části Nette jsou „moc chytré“ a je tedy težké nahradit jednu vrstvu druhou.

Zkusil jsem tento úkol jako takovou vlaštovku pro „placenou verzi Nette“. Když to vezmu jako příklad, tak se dá domluvit ve firmě, že tu máme prostor na zlepšení naší aplikace, bude to stát tolik a tolik a nesebere to tolik času našich vývojářů. Přijde mi to mnohem transparentnější, než lobovat za příspěvky na něco „abstraktního“ s nejasnými podmínkami.

2bfree
Člen | 248
+
0
-

A děkuji za tip na ten sandbox. Ten jsem při psaní požadavku nenašel. Zkusím na něj mrknout, jak to má řešené.

2bfree
Člen | 248
+
0
-

Při té příležitosti jsme narazili na problém, že Presenter->getUser() je vázáno na celý životní cyklus aplikace a ne na Request. Tedy, že se nepočítá s tím, že by v jednom životním cyklu přišlo více requestů.

Kdyby se tomu někdo dále věnoval, tak by bylo vhodné toto přepracovat.

visitek
Člen | 1
+
0
-

Tato myšlenka je naprosto jasná a praktická. Stejně takto to implemetujeme v ZF3 pomocí php-pm na reactu. ZF je na to přece jen pripravenejsi…