Szerintetek jó ez az elgondolás?
Készítek egy játékot, amihez a legmegfelelőbbnek a szerver-kliens kialakítást választottam.
Nos. Az a lényeg, hogy a map dinamikusan jön létre, és változik. A szerveren fut kb minden. A kliens csak a grafikai megjelenítést, és a bevitelt kezeli.
Nos. Ugye darabokra van osztva a map, ez megkönnyíti a kezelését a mapnak. Ugye a map darabjainak tömbjét tcp-vel küldöm el, mikor a játékos a szerverről letölti a mapot. A bevitelt értelem szerűen udp-vel.
Nos a mapon történő változásokat, vagy az egész map darabot küldjem újra szerintetek? Esetleg ha csak a változást, akkor tcp-vel elég gyors lenne, vagy udp-vel kéne?
Per pilla csak a változást küldi el a szerver és tcp-vel. Mert ugye ez biztos megérkezik a klienshez, ezáltal szinkronba marad a szerver és a kliens. És elkerülöm a szellem objektumok létrejöttét. Ez jó lenne, de valahogy lassúnak érzem, és félek hogy szerver laggot okozna. Átállítanám udp-re, de ez nem biztos hogy megjön. És lehet egy objektum létre jött szerver oldalon, kliens oldalon nem, vagy még ott van kliens oldalon, de szerver oldalon már nincs.
Szerintetek jó ez az elgondolás? Nem lassu? Ugye a változásos annyik hogy vagy elpusztult egy objektum az adott koordinátán vagy létre jött.
A hasznos válaszokat előre is köszönöm.
Értem, de nem így kérdeztem.
Sinamikus alatt én mondjuk terra tipusú MAP-et értek, amiből két egyformát nem is igen lehet generálni, vagy statikus, amely megszámlálható grafikai elemből építkezik?
Úgy sejtem, nálad az utóbbi játszik, nem?
Mert akkor a grafikus asset a kliensen van, az ezt összeállító map-et a szerver küldi át, de a kliens feladata a frissítés, mert mégis csak a kliens játszik, nem?
A szerver csak adminisztrál és kontrollál.
Hát nem gondolom, hogy a mai hálózati technológiák mellett a TCP jelentősen lassabb lenne. Az UDP hibáit te is látod (egyébként UDP-vel is megoldható sok minden, használnak sokszor olyat, hogy ha a kliens fogadta az UDP csomagot küld egy ACK-ot a szervernek).
Kérdés itt, hogy mennyire gyorsan változik a szerveren az adat és mennyi a frissités. Megoldható (sok helyen alkalmazzák) hogy X ideig a frissitések mennek, és időnként átküldik a teljes mapot (pl. a klasszikus mpeg stream is így működött valamikor nagyon régen). Ilyenkor összetudnak szinkronizálni. Számtalan megoldás van. Kérdés, hogy pl. szétszedhető-e úgy, hogy vannak statikus részei a mapnak, ekkor csak a dinamikus részt kell küldeni. Nagyon meg kell nézni az adatokat, hogy hogyan lehet leírni. Szintén sokat lehet nyerni (főleg az áttolt adagmennyiségen, ha a hálózati sávszélesség és késleltetés számít) hogy hogyan kódolsz, és hogyan ábrázolod az adatokat. Itt kell és érdemes optimalizálni, mert ha tömörited az adatokat (vagy eleve jól pakolod össze) akkor kevesebb adatot kell áttolni a neten, de több idő a CPU-nak helyre állítani a mapot. De ehhez az egészet kell egyben látni, hogy pontosan mit kell áttolni. Pl. egy figura mozgatásánál nem biztos, hogy az egész figurát át kell vinni, hanem egyszer elküldjük a figurát, utána azt, hogy melyik "izület" merre és mennyit mozdul. Majd a kliens rendereli. De választható az is, hogy átküldjük az egész figurát. Ezer meg ezer szempont van.
UDP nem küld vissza semmit.
Az való igaz, hogy érdemesebb UDP-t használni és egyedi azonosítóval ellátott csomagot kétszer, netán háromszor elküldeni, mint TCP-vel vergődni.
Az init map kerül a kliensek között kiosztásra.
Ezen túl az aktív (megjelenített) map-fragmentum frissül prior egyben (per client), a többi utána, ha a szervernek van ideje szusszanni.
A karaktereket nem küldi át senki. Mindig csak a korábbi állapothoz képest történt változásokkal kell terhelni a szervert. Érdemes az adatcsomagokat tömöríteni és a lehető legkisebbre méretezni az egyedi azonosítókat, illetve azok állapotait. Akár 10 bitre (töredék byte) is megéri kidolgozni.
A 10 bit mióta töredék byte? Ha jól emlékszem 8 bit egy bájt.
"UDP nem küld vissza semmit" válasz küldhető UDP-n is (így működik pl. a DNS).
A 10 bitből 2 bit a második byte töredéke.
Az UDP nem küld vissza semmit, mert ha küldene, akkor nem lenne UDP.
Nem is érdemes küldeni nyugtázójelet, csomagot, mert azzal hülyeség terhelni a szervert, hogy egy esetleg már halott, outdated csomagot küldjön újra. Nagy terheltségű játékoknál Mindig van némi packet loss, mégsem foglalkozik vele senki.
#8
UDP fölé olyan saját protokollt épít amilyet akar
ne oszd már itt a hülyeséget
"UDP fölé olyan saját protokollt épít amilyet akar"
Erre írtam, hogy az már nem UDP.
Szóval, hogy a szavaiddal éljek, ne oszd már itt a hülyeséget. Olvasgass te is:
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!