Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 28. říjen 2011, 18:39:44 Předmět: RTS :: Blocking x Non-blocking sockety |
|
|
Zdravím,
teď se trochu vzdělávám v oboru sítí kvůli semestrálce do školy a potřebuji si ujasnit pár věcí.
Jelikož bych rád udělal nějakou hodně primitivní hru (velice jednoduchou RTS), potřebuji se zeptat, co použít. Líbí se mi myšlenka mít jen jedno vlákno, ale používat non-blocking sockety moc neumím, takže co navrhujete?
Abych pravdu řekl, sítím zatím rozumím jen povrchně a zkoušel jsem zatím jen jednoduchou komunikaci mezi serverem a jedním klientem v blokovacím režimu, ale nějak jsem z toho vyvodil, že pro RTS to není to pravé ořechové...
Zkrátka, otázka je jasná. Co by jste mi poradili pro tvorbu RTS hry typu client-server, kde může běžet několik her a spolu mohou hrát maximálně 4 hráči?
Postahoval jsem nějaké články co jsem tu našel na fóru, ale rád bych slyšel váš názor.
Moc děkuji. _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 28. říjen 2011, 18:50:01 Předmět: Re: RTS :: Blocking x Non-blocking sockety |
|
|
VODA napsal: |
Líbí se mi myšlenka mít jen jedno vlákno, ale používat non-blocking sockety moc neumím, takže co navrhujete? |
Navrhuju naučit se non-blocking sockety. Nic na tom není. Rozhodně je to jednodušší než šaškovat s vláknama. _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
|
nou
Založen: 28. 07. 2007 Příspěvky: 1047
|
Zaslal: 28. říjen 2011, 20:01:01 Předmět: |
|
|
no myslim ze non blocking sokety su vhodne aj ked clovek pouzije vlakna. pretoze inak by musel tvorit vlakno pre kazdeho klienta. co fakt nie je to prave orechove. _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 29. říjen 2011, 10:05:23 Předmět: |
|
|
Oki, myslel jsem si, že mi poradíte non-blocking sockety...
Další otázkou je, jak řešit hru a tím nemyslím hru jako takovou, ale spojení několika hráčů, kteří spolu hrají...
Měl bych pro každou hru tvořit nový proces/vlákno a nebo to vše obsluhovat jedním? Já věřím, že by to jedním obsluhovat šlo, ale otázkou je, jestli to není hloupost... _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
nou
Založen: 28. 07. 2007 Příspěvky: 1047
|
Zaslal: 29. říjen 2011, 16:40:49 Předmět: |
|
|
nie. nie je to hlupost. paralelizovat je dnes vhodne. ale zase pre kazdeho vytvarat vlastne vlakno je hlupost. ono potom by to aj tak velmi pravdepodobne skoncilo serializovane na mutexoch. a este by si mohol vniest kopec deadlockov ak by si kazdeho obsluhoval z samostaneho vlakna. _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 29. říjen 2011, 16:51:55 Předmět: |
|
|
Server bych nechal jedno vlákno, které bude obsluhovat všechny klienty (v nějaké smyčce postupně) .. na druhém vlákně bych pak poslouchal příchozí spojení.
Tím, že se tam namlátí hory vláken se to neurychlí (pokud teda vlákno nemá 1 CPU), protože přepínání kontextu vláken to bude brzdit _________________ Perry.cz |
|
Návrat nahoru |
|
|
satik
Založen: 06. 05. 2010 Příspěvky: 161 Bydliště: Krkonose
|
Zaslal: 30. říjen 2011, 09:27:17 Předmět: |
|
|
U nas mame tohle reseny tak, ze kazdej klient ma svoje vlakno jen na komunikaci a kdyz od klienta prijde message, tak se ulozi do jedny velky fronty zprav od klientu (samozrejme v musi bejt lockla) a ta se pak zpracovava v mainloopu (v kazdem serverovem framu). |
|
Návrat nahoru |
|
|
Crypton
Založen: 14. 05. 2009 Příspěvky: 306 Bydliště: The Void
|
Zaslal: 30. říjen 2011, 11:29:39 Předmět: |
|
|
Pokud to je jen pro semestrální práci, tak bych se vyhnul zbytečným složitostem a udělal to co nejrychleji a nejjednodušeji jak jen to jde, takže bych použil blokující operace a protokol TCP/IP. A jen jedno vlákno, samozřejme.
Nezapomeň že budeš muset ještě navrhnout svůj vlastní "protokol" pro komunikaci mezi serverem a klientem, což může zabrat taky dost času, takže bych se spíš soustředil na to. A to ani radši nemluvím o času který strávíš jen tvorbou té herní části.... takže dávej bacha ať ti z toho nevznikne věc o rozsahu bakalářské práce.
Jinak doporučuju mrknout na funkci select _________________
|
|
Návrat nahoru |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 30. říjen 2011, 11:55:41 Předmět: |
|
|
Jo jenže pro RTS bohužel blokující sockety v jednom vlákně použít nemohu...nebo snad jo?
EDIT: select znám, už jsem si o tom něco nastudoval... _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
Crypton
Založen: 14. 05. 2009 Příspěvky: 306 Bydliště: The Void
|
Zaslal: 30. říjen 2011, 12:08:52 Předmět: |
|
|
VODA napsal: |
Jo jenže pro RTS bohužel blokující sockety v jednom vlákně použít nemohu...nebo snad jo? |
Ale jo, můžeš, máš tam jen 4 hráče, takže ti to jedno jádro/vlákno vklidu utáhne. Právě proto jsem zmínil tu funkci select, je totiž vhodná pro server s jedním vláknem, protože v jednom volání můžeš zkontrolovat sokety všech klientů, takže můžeš blokovat a zároveň zpracovávat požadavky všech klientů.
Zase to moc nekomplikuj, protože s více vlákny ti nastane problém se synchronizací, a začne se ti to komplikovat, tj. příjdou na řadu mutexy, semafory, convary a atomické operace.
Edit: http://tangentsoft.net/wskfaq/examples/basics/select-server.html _________________
|
|
Návrat nahoru |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 30. říjen 2011, 12:55:12 Předmět: |
|
|
Pořád mi nejdou dohromady ty dva pojmy Realtime Strategy a Blocking sockets...
Ale pokud říkáš, že to půjde, tak to zkusím a uvidíme... _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
Crypton
Založen: 14. 05. 2009 Příspěvky: 306 Bydliště: The Void
|
Zaslal: 30. říjen 2011, 13:31:33 Předmět: |
|
|
VODA napsal: |
Pořád mi nejdou dohromady ty dva pojmy Realtime Strategy a Blocking sockets...
Ale pokud říkáš, že to půjde, tak to zkusím a uvidíme... |
Jde ti o simulaci herního světa? Však nemusíš čekat do nekonečna, můžeš si tam vynutit jak dlouho se má čekat/blokovat, přímo přes parametr timeout, u té funkce select.
K tomu, je velice jednoduché u tohoto návrhu serveru přejít na neblokující operace, stačí si ten listening soket nastavit jako neblokující (přes ioctlsocket), a řídit si čekání po svém. _________________
|
|
Návrat nahoru |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 30. říjen 2011, 14:59:00 Předmět: |
|
|
Já bych ti to řekl takhle... pokud nemusíš, nedělej jako semestrálku ze sítí (UPS ?) hru A když už hru, tak hlavně ne nějaké RTS... stačí obyčejné člověče nezlob se nebo had... a práce je s tím nad hlavu i tak _________________ Perry.cz |
|
Návrat nahoru |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 30. říjen 2011, 15:25:38 Předmět: |
|
|
Já jsem čekal, že to řekneš...
Ale já to zvládnu... _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 30. říjen 2011, 17:38:24 Předmět: |
|
|
Já neřikám, že ne .. jen že si přiděláváš práci když by jsi se místo toho mohl věnovat Solertii _________________ Perry.cz |
|
Návrat nahoru |
|
|
|