[python] Roboti, REST, Flask?

Jan Bednařík jan.bednarik na gmail.com
Úterý Září 29 21:38:44 CEST 2015


2015-09-11 10:29 GMT+02:00 Marek Nožka <marek na tlapicka.net>:

> Ahoj
>
> Potřeboval bych malou radu. Učím programování(Python) na SŠ. Takže jsem
> vymyslel(okoukal), že si budeme hrát na Roboty. Bude to tahová hra.
> Jednotliví roboti(studenti) se připojí k serveru a budou mezi sebou
> soutěžit
> o nejlepší algoritmus, který projde bludištěm podle zadaných pravidel.
>
> Na serverovou část jsem chtěl použít Flask a vytvořit jednoduché REST API.
> Řeším ale jak mám obsloužit více klientů tak, aby na sebe navzájem počkali.
> Každý klient by měl říct, kam táhne. Ale odpověď můžu poslat až potom, co
> všichni pošlou požadavek. Napadli mě dvě řešení.
>
> 1) Klient pošle požadavek a čeká na odpověď. Stream odpovědi se ale zastaví
>    a čeká se až se ozvou další klienti. Tohle nevím jak bych ve Flasku
>    udělal -- pokud to tedy vůbec jde. Pokoušel jsem se to vygooglit ale na
>    nic kloudného jsem nepřišel.
>


Ahoj. Tohle se ti ve Flasku, Djangu, aj. synchronních frameworcích bude
dělat špatně. Použiješ-li asynchronní aiohttp, můžeš efektivně obsluhovat
všechny requesty z Robotů "paralalně" (můžou paralelně čekat s odpovědí).
Složitost implementace s aiohttp je zhruba stejná jako ve Flasku.

http://aiohttp.readthedocs.org/en/stable/



Nicméně na tento problém se REST, respektive HTTP, zrovna moc nehodí (leda
ty websockety). Vhodnější by bylo použít Pub/Sub. Měly by stačit dva topicy
(channely), něco jako:

1. Round
 - hra na něj dělá publish povelu, že je možné táhnout další kolo
 - všichni roboti sem dělají subscribe a reagují na povel

2. Move
 - hra se sem dělá subscribe a reaguje na tahy robotů
 - roboti sem dělají publish tahů

Pro jednoduchost rozchození můžeš použít jako Pub/Sub broker třeba Redis.
Má dobrou knihovnu jak pro asynchronní Pyhon aioredis, stejně tak pro
klasický synchronní přístup redis-py.

https://github.com/aio-libs/aioredis
https://github.com/andymccurdy/redis-py

Honza



2) Klient pošle požadavek a za nějakou chvilku se zeptá jestli má
>    server už odpověď. To je zase více složitosti na straně klienta.
>
> Protože jsem nic podobného zatím nikdy nedělal, budu vděčný za každou
> připomínku, poznámku nebo radu. Co za knihovnu/framework byste mi
> doporučovali.
>
> Dííííky
>            Marek
>
> --
>  @ @ @     Marek Nožka
>  '****.@
>  :*****`@   email: marek <@t> tlapicka <d.t> net
>  `*****'   jabber: tlapicka <@t> mitranet <d.t> cz
>   :****:      web: http://tlapicka.net/
>   `****'
>   `****'   Powered by Debian GNU/Linux
>   `.**'
>     ¨¨
> _______________________________________________
> Python mailing list
> python na py.cz
> http://www.py.cz/mailman/listinfo/python
>
> Visit: http://www.py.cz
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://www.py.cz/pipermail/python/attachments/20150929/f07cdc4b/attachment.html>


Další informace o konferenci Python