Komunikace: Klient -> Server -> Ostaní klienti – Hry – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Komunikace: Klient -> Server -> Ostaní klienti – Hry – Fórum – Programujte.comKomunikace: Klient -> Server -> Ostaní klienti – Hry – Fórum – Programujte.com

 

Lukáš
~ Anonymní uživatel
301 příspěvků
17. 11. 2013   #1
-
0
-

Zdravím všechny,

jsem programátor a trpím neustálým přemýšlením nat tím, jak vyřešit různé úkoly v programování :D
K programování her jsem ještě nepřičuchl, ale poslední dobou mi pořád v hlavě šrotuje problém, který nevím jak se obyčejně řeší a to je komunikace v multiplayerových hrách.

Příklad: Mám plochu (hřiště) na kterou se mohou připojit hráči. Pro ilustraci mějme takovýto náhled:

Připojen obrázek.Modré trojúhelníky jsou lidé připojení na "server" (hřiště). Červené tečky jsou obličeje - tzn. směr pohledu. Pokud bych tedy chtěl udělat takovéto hřiště, po kterém by lidé mohli chodit, točit se a narážet do sebe (nebo třeba i "střílet"), jak by měla probíhat komunikace tak, abych zbytečně nezatěžoval server a všicni hned viděli co dělají ostatní? Jaký komunikační protokol se k tomu využívá?

Můžete mi to někdo kdo tomu rozumíte zkusit vysvwtlit? Třeba když jeden člověk popojde a otočí se. Jaké informace se jakým způsobem přenášejí na server a ze serveru k ostatním klientům?

Díky :)

Nahlásit jako SPAM
IP: 212.4.134.–
Doomista+1
Stálý člen
17. 11. 2013   #2
-
0
-

Používá se běžně UDP protokol, ve kterém posíláš pakety s daty, které ovšem nemusí dojít a nemusí dojít v pořadí ve kterém si je odesílal, prostě když přijdou nějaká data, tak se vyhodnotí (naproti tomu TCP protokol očekává, že mu přijdou všechny odeslané pakety a že přijdou ve správném pořadí, takže pokud člověk nedělá hru pro počítače projené lankem, tak je TCP celkem problém).
Pakety se kterými jsem se setkal, tak byly jednoduché textové řetězce, a v takových bys musel XY souřadnice přeložit do 256soustavy (2 char znaky na souřadnici v rozmezí <0,2^16), 4 znaky na uložení XY) a úhel, pokud bys s ním nativně pracoval jakože 2pí=256, tak by se dal zakódovat do jednoho znaku. Celkově bys pak musel v každém cyklu programu odeslat 1 paket s pěti znaky serveru a očekávat paket od serveru, který by musel nejspíše obsahovat pozice a natočení všech hráčů ve hře (nyní předpokládám, že se nedá střílet, ale jen se pohybovat, otáčet a narážet).
V případě že by se dalo střílet, tak už by situace byla horší, protože buď bys musel přeposílat od serveru ke klientům informace o všech vystřelených projektilech a klienti by si to vyhodnocovali, anebo bys zatížil výpočetní čas serveru (což se mi zdá praktičtější) a posílal klientům data jen o tom, zda jsou zranění, či ne.
Faktem zůstává, že v každém cyklu programu musíš odeslat alespoň svou aktuální pozici a natočení a očekávat, že ti přijdou informace o pozicích a natočeních ostatních hráčů.

Nahlásit jako SPAM
IP: 90.176.176.–
Na vše stačí iostream...
Lukáš
~ Anonymní uživatel
301 příspěvků
17. 11. 2013   #3
-
0
-

Fíha - na takovou kavinku to zní docela složitě :)

OK, rozdíl mezi TCP a UDP který jsi popisoval znám (i když neznám řešení problému s pořadm packetů, ale to už si dohledám).

Takže Tebou popisovaný postup se používá třeba i v Counter Strike atp? A nejdou ta UTP data moc jednoduše odchytávat? Pokud bych například posílal i data o přihlášeném hráči, tak aby se nedala vykrádat. Ale tak to už by se dalo zašifrovat (ale zas na to by byl potřeba další čas na dešifrování).

Ještě zkusím jeden dotaz. Nenapadá Tě místo, kdy bych viděl třeba v C++ naznačeno, jak by to mělo fungovat?

Každopádně díky za odpověď - docela mi to pomohlo pochopit jak to vlastně funguje. Ale nechcu vidět ty packety ve vymakanejších hrách, kde se stříli hejbe, skáče, jsou tam emoce, výbuchy, helikoptéry atp. To musí mít jeden paket půl giga :)

Ještě k těm projektilům. Posílat pozici projektilu by bylo asi moc náročný řešení. Tam by bylo asi lepší poslat jen čas výstřelu, rychlost a směr a ta animace letu by se už dopočítala na jednodlivých klientech nebo kecám?

Nahlásit jako SPAM
IP: 212.4.134.–
z
~ Anonymní uživatel
268 příspěvků
Nahlásit jako SPAM
IP: 88.101.8.–
Mixxy0
Newbie
17. 11. 2013   #5
-
0
-

Nene, UDP ti nepomuze, stejne by to bylo strasne moc dat. Podivej se na multicast, ten se pouziva na hrani her. Pokud bys chtel, mohl bych ti k tomu neco zaslat.

Nahlásit jako SPAM
IP: 85.132.138.–
Dřív jsem býval namyšlený, ale teďka už nemám chybu!
z
~ Anonymní uživatel
268 příspěvků
18. 11. 2013   #6
-
0
-

#5 Mixxy
Multicast se teda nepoužívá (mimo LAN) a rozhodně to není strašně moc dat.

Nahlásit jako SPAM
IP: 88.101.8.–
Lukáš
~ Anonymní uživatel
301 příspěvků
18. 11. 2013   #7
-
0
-

Podle toho co jsem dohledal a přečetl potvrzuji, že se nejčastěji používá UDP. Nicméně i za zmínku o multicastu děkuji. Taky jsem si o tom něco přečetl.

O tom UDP už se mi povedlo najít nějaké info i ukázky, takže tento thread by se dal považovat za ukončený a všem děkuji za odpovědi :)

Nahlásit jako SPAM
IP: 212.4.134.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 5 hostů

Podobná vlákna

Server a Klient — založil infomf

Klient vs. applikacny server — založil Mr.Smith

Klient-Server aplik. — založil Wladimir

Server - Klient logika — založil Kubas129

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý