Pořád nechápu jednu věc, jak řekneš systému ať něco stahuje, nebo zapisuje, že si zatím půjdeš dělat něco jiného?
paranoiq(2013-06-30 19:34)
otevřeš neblokující socket a čas od času zeptáš, jestli už je hotovo
pokud jde o stahování, jde to i bez Reactu. je pro to podpora rovnou v CURLu - https://github.com/paranoiq/dogma/blob/master/Dogma/Http/ChannelManager.php (zkoušel jsem nejvýš 1000 paralelních vláken)
Honza Tvrdík(2013-07-01 02:52)
Koukni na funkce stream_select & stream_set_blocking. Nicméně napsal pomocí toho něco asynchronně bez nějaké abstrakce je dost nepohodlné. Je to skoro jako psát to v C =)
Zkusil jsem schválně napsat jednoduchý <a href="https://gist.github.com/JanTvrdik/5897869">asynchronní downloader</a>, aby bylo vidět, co přibližně React.PHP dělá (resp. co si tak myslím že asi dělá).
Díky za nasdílení slajdů. Mrzí mě, že jsem na přednášce nebyl. Mám otázku ke slajdům 60 a 61: Existuje způsob, jak <code>flow()</code> přimět k tomu, aby čekal na dvě věci najednou? Třeba bychom chtěli najednou stahovat followers a following. Tedy zavolám <code>fetchProfile()</code>, na to potřebuji počkat. Pak chci zavolat <code>fetchFollowers()</code> a <code>fetchFollowing()</code>, ty na sebe vzájemně čekat nemusí, ale na konci chci vrátit třeba jejich průnik, takže musím počkat na obě. Dalo by se něco takového s <code>flow()</code> napsat?
Zcela nesouvisející věc: Na <code>flow()</code> mi přijde trochu matoucí, že po yieldnutí nePromise generátor dál pokračuje v běhu. Jednak tím pádem neexistuje způsob, jak generátor zastavit a jednak když pak yieldnu něco dalšího, tak dříve yieldnutá hodnota zmizí v propadlišti dějin. Dala by se sémantika z <code>return $recur($x);</code> změnit na <code>return $x;</code>, což by vyřešilo oba problémy?
Flow je z podstaty sekvenční. Když chci dělat víc věcí najednou, musím použít kombinátor `When::all` (který má signaturu `Array[Promise[X]] => Promise[Array[X]]`)
Druhé otázce úplně nerozumím. Generátor můžu zastavit *zevnitř* (buď vyhodím výjimku, nebo kód skončí). Generátor ve `flow` nepředstavuje sekvenci hodnot, ale sekvenci kroků a výpočtů, které vedou k jedné výsledné hodnotě zabalené v `Promise`. Kdybych mohl yieldnout více hodnot, nestačila by mi promise, ale potřeboval bych něco jako Rx Observable.
pokud jde o stahování, jde to i bez Reactu. je pro to podpora rovnou v CURLu - https://github.com/paranoiq/dogma/blob/master/Dogma/Http/ChannelManager.php (zkoušel jsem nejvýš 1000 paralelních vláken)
Zkusil jsem schválně napsat jednoduchý <a href="https://gist.github.com/JanTvrdik/5897869">asynchronní downloader</a>, aby bylo vidět, co přibližně React.PHP dělá (resp. co si tak myslím že asi dělá).