.[ ČeskéHry.cz ].
RTS :: Blocking x Non-blocking sockety
Jdi na stránku 1, 2, 3  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Sítě
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ň

PříspěvekZaslal: 28. říjen 2011, 18:39:44    Předmět: RTS :: Blocking x Non-blocking sockety Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



Založen: 28. 07. 2007
Příspěvky: 1554

PříspěvekZaslal: 28. říjen 2011, 18:50:01    Předmět: Re: RTS :: Blocking x Non-blocking sockety Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
nou



Založen: 28. 07. 2007
Příspěvky: 1047

PříspěvekZaslal: 28. říjen 2011, 20:01:01    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 29. říjen 2011, 10:05:23    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1047

PříspěvekZaslal: 29. říjen 2011, 16:40:49    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 29. říjen 2011, 16:51:55    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
satik



Založen: 06. 05. 2010
Příspěvky: 161
Bydliště: Krkonose

PříspěvekZaslal: 30. říjen 2011, 09:27:17    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Crypton



Založen: 14. 05. 2009
Příspěvky: 306
Bydliště: The Void

PříspěvekZaslal: 30. říjen 2011, 11:29:39    Předmět: Odpovědět s citátem

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 Wink
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 30. říjen 2011, 11:55:41    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Crypton



Založen: 14. 05. 2009
Příspěvky: 306
Bydliště: The Void

PříspěvekZaslal: 30. říjen 2011, 12:08:52    Předmět: Odpovědět s citátem

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. Wink

Edit: http://tangentsoft.net/wskfaq/examples/basics/select-server.html
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 30. říjen 2011, 12:55:12    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Crypton



Založen: 14. 05. 2009
Příspěvky: 306
Bydliště: The Void

PříspěvekZaslal: 30. říjen 2011, 13:31:33    Předmět: Odpovědět s citátem

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. Smile
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 30. říjen 2011, 14:59:00    Předmět: Odpovědět s citátem

Já bych ti to řekl takhle... pokud nemusíš, nedělej jako semestrálku ze sítí (UPS ?) hru Wink 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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 30. říjen 2011, 15:25:38    Předmět: Odpovědět s citátem

Já jsem čekal, že to řekneš... Wink

Ale já to zvládnu... Cool
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 30. říjen 2011, 17:38:24    Předmět: Odpovědět s citátem

Já neřikám, že ne Smile.. jen že si přiděláváš práci Smile když by jsi se místo toho mohl věnovat Solertii
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Sítě Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2, 3  Další
Strana 1 z 3

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna