Sou modèl rezo a nan jwèt pou débutan

Sou modèl rezo a nan jwèt pou débutan
Pou de semèn ki sot pase yo mwen te travay sou motè a rezo pou jwèt mwen an. Anvan sa, mwen pa t 'konnen anyen sou rezo nan jwèt ditou, kidonk mwen te li yon anpil nan atik ak fè yon anpil nan eksperyans yo konprann tout konsèp yo epi yo dwe kapab ekri pwòp motè rezo mwen an.

Nan gid sa a, mwen ta renmen pataje avèk ou plizyè konsèp ou bezwen aprann anvan ou ekri pwòp motè jwèt ou, ansanm ak pi bon resous ak atik pou aprann yo.

An jeneral, gen de kalite prensipal achitekti rezo: kanmarad-a-kanmarad ak kliyan-sèvè. Nan yon achitekti kanmarad-a-kanmarad (p2p), done yo transfere ant nenpòt pè jwè ki konekte, pandan y ap nan yon achitekti kliyan-sèvè, done yo transfere sèlman ant jwè yo ak sèvè a.

Malgre ke achitekti kanmarad-a-kanmarad toujou itilize nan kèk jwèt, kliyan-sèvè se estanda a: li pi fasil pou aplike, mande pou yon lajè chanèl ki pi piti, epi fè li pi fasil pou pwoteje kont fason ou kapab triche. Se poutèt sa, nan gid sa a, nou pral konsantre sou achitekti kliyan-sèvè a.

An patikilye, nou pi enterese nan serveurs otoritè: nan sistèm sa yo, sèvè a toujou dwat. Pou egzanp, si jwè a panse li nan (10, 5) epi sèvè a di li li nan (5, 3), Lè sa a, kliyan an ta dwe ranplase pozisyon li ak youn nan sèvè a ap rapòte, pa nan lòt fason alantou. Sèvi ak serveurs autorité fè li pi fasil pou rekonèt tricheurs.

Gen twa eleman prensipal nan sistèm rezo gaming:

  • Pwotokòl transpò: ki jan done yo transfere ant kliyan ak sèvè a.
  • Pwotokòl aplikasyon: ki sa ki transmèt soti nan kliyan nan sèvè a ak soti nan sèvè a nan kliyan, ak nan ki fòma.
  • Lojik aplikasyon: ki jan done yo transmèt yo itilize mete ajou eta a nan kliyan yo ak sèvè a.

Li enpòtan anpil pou w konprann wòl chak pati ak difikilte ki asosye ak yo.

Pwotokòl transpò

Premye etap la se chwazi yon pwotokòl pou transpòte done ant sèvè a ak kliyan yo. Gen de pwotokòl entènèt pou sa: Tchp и udp. Men, ou ka kreye pwotokòl transpò pwòp ou a ki baze sou youn nan yo oswa itilize yon bibliyotèk ki sèvi ak yo.

Konparezon TCP ak UDP

Tou de TCP ak UDP yo baze sou IP. IP pèmèt yon pake yo dwe transmèt soti nan yon sous nan yon reseptè, men li pa garanti ke pake a voye a pral rive nan reseptè a pi bonè oswa pita, ke li pral rive nan li omwen yon fwa, epi ke sekans nan pake ap rive nan. lòd ki kòrèk la. Anplis, yon pake ka sèlman genyen yon gwosè done limite, ki bay pa valè a Mtu.

UDP se jis yon kouch mens sou tèt IP. Pakonsekan, li gen menm limit yo. Kontrèman, TCP gen anpil karakteristik. Li bay yon koneksyon òdone serye ant de nœuds ak tcheke erè. Se poutèt sa, TCP se trè pratik epi yo itilize nan anpil lòt pwotokòl, pou egzanp, nan HTTP, Ftp и Smp. Men, tout karakteristik sa yo gen yon pri: reta.

Pou konprann poukisa fonksyon sa yo ka lakòz latansi, nou bezwen konprann ki jan TCP fonksyone. Lè lame ki voye a transmèt yon pake bay lame k ap resevwa a, li espere resevwa yon rekonesans (ACK). Si apre yon sèten tan li pa resevwa li (paske pake a oswa konfimasyon an pèdi, oswa pou kèk lòt rezon), Lè sa a, li voye pake a ankò. Anplis, TCP garanti ke pake yo resevwa nan lòd ki kòrèk la, kidonk jiskaske yo resevwa yon pake ki pèdi, tout lòt pake pa ka trete, menm si yo te deja resevwa pa nœud k ap resevwa a.

Men, jan ou pwobableman konprann, latansi nan jwèt multijoueurs trè enpòtan, espesyalman nan jan aktif tankou FPS. Se poutèt sa anpil jwèt itilize UDP ak pwotokòl pwòp li yo.

Yon pwotokòl natif natal ki baze sou UDP ka pi efikas pase TCP pou plizyè rezon. Pou egzanp, li ka make kèk pakè kòm ou fè konfyans ak lòt moun ki pa fè konfyans. Se poutèt sa, li pa pran swen si pake a enfidèl te rive jwenn moun k ap resevwa a. Oswa li ka trete plizyè kouran done pou yon pake ki pèdi nan yon sèl kouran pa ralanti lòt kouran. Pou egzanp, ta ka gen yon fil pou opinyon jwè ak yon lòt fil pou mesaj chat. Si yon mesaj chat ki pa ijan done pèdi, Lè sa a, li pa pral ralanti opinyon an ki ijan. Oswa yon pwotokòl propriétaire ta ka aplike fyab yon fason diferan pase TCP yo dwe pi efikas nan yon anviwònman jwèt videyo.

Se konsa, si TCP absorb, Lè sa a, nou pral bati pwòp pwotokòl transpò pa nou ki baze sou UDP?

Tout bagay se yon ti kras pi konplike. Menm si TCP se prèske pa-optimal pou sistèm rezo Gaming, li ka travay byen byen pou jwèt espesifik ou a epi sove ou tan valab. Pa egzanp, latansi ka pa yon pwoblèm pou yon jwèt ki baze sou vire oswa yon jwèt ki ka jwe sèlman sou rezo LAN, kote latansi ak pèt pake yo pi piti anpil pase sou entènèt la.

Anpil jwèt siksè, ki gen ladan World of Warcraft, Minecraft, ak Terraria, itilize TCP. Sepandan, pifò FPS yo sèvi ak pwòp pwotokòl ki baze sou UDP yo, kidonk nou pral pale plis sou yo anba a.

Si w chwazi itilize TCP, asire w ke li enfim Algorithm Nagle a, paske li tampon pake yo anvan yo voye, ki vle di li ogmante reta a.

Pou aprann plis sou diferans ki genyen ant UDP ak TCP nan yon kontèks jwèt multijoueurs, gade atik Glenn Fiedler a. UDP vs. TCP.

Pwotokòl pwopriyetè

Se konsa, ou vle kreye pwotokòl transpò pwòp ou a men ou pa konnen ki kote yo kòmanse? Ou gen chans, paske Glenn Fiedler te ekri de atik etonan sou li. Ou pral jwenn yon anpil nan lide entelijan nan yo.

Premye atik Rezo pou pwogramè jwèt yo 2008, pi fasil pase dezyèm lan Konstwi yon pwotokòl rezo jwèt 2016. Mwen rekòmande pou w kòmanse ak pi gran an.

Ou dwe konnen ke Glenn Fiedler se yon gwo defann sèvi ak pwotokòl pwòp ou a ki baze sou UDP. Apre li fin li atik li yo, ou pral pwobableman adopte opinyon li ke TCP gen dezavantaj grav nan jwèt videyo, epi ou pral vle aplike pwotokòl pwòp ou a.

Men, si w se nouvo nan rezo, fè tèt ou yon favè epi sèvi ak TCP oswa yon bibliyotèk. Pou w kapab aplike pwòp pwotokòl transpò ou, ou bezwen aprann anpil bagay davans.

Bibliyotèk rezo

Si ou bezwen yon bagay ki pi efikas pase TCP, men ou pa vle deranje aplike pwotokòl pwòp ou a ak antre nan anpil detay, ou ka itilize bibliyotèk la nèt. Gen anpil nan yo:

Mwen pa te eseye yo tout, men mwen prefere ENet paske li fasil pou itilize ak serye. Anplis de sa, li gen dokiman klè ak yon leson patikilye pou débutan.

Konklizyon Pwotokòl Transpò

Pou rezime, gen de pwotokòl transpò prensipal: TCP ak UDP. TCP gen anpil karakteristik itil: fyab, prezèvasyon lòd pake, deteksyon erè. UDP pa gen tout bagay sa yo, men TCP, pa nati li yo, gen gwo latansi ki pa akseptab pou kèk jwèt. Sa vle di, pou asire latansi ba, ou ka kreye pwotokòl pwòp ou a ki baze sou UDP oswa itilize yon bibliyotèk ki aplike pwotokòl transpò sou UDP epi ki adapte pou jwèt videyo multijoueurs.

Chwa ant TCP, UDP, ak bibliyotèk la depann de plizyè faktè. Premyèman, soti nan bezwen yo nan jwèt la: li bezwen latansi ki ba? Dezyèmman, soti nan kondisyon ki nan pwotokòl aplikasyon an: li bezwen yon pwotokòl serye? Kòm nou pral wè nan pwochen pati a, li posib yo kreye yon pwotokòl aplikasyon pou ki yon pwotokòl enfidèl se byen apwopriye. Finalman, ou bezwen konsidere tou eksperyans nan pwomotè motè rezo a.

Mwen gen de konsèy:

  • Abstraksyon pwotokòl transpò a otank posib soti nan rès aplikasyon an pou li ka fasil ranplase san yo pa reekri tout kòd la.
  • Pa twò optimize. Si ou pa yon ekspè rezo epi ou pa sèten si ou bezwen pwòp pwotokòl transpò ki baze sou UDP ou a, ou ka kòmanse ak TCP oswa yon bibliyotèk ki bay fyab, epi answit teste ak mezire pèfòmans. Si w ap gen pwoblèm epi ou sèten se yon pwotokòl transpò, Lè sa a, li ta ka tan yo kreye pwòp pwotokòl transpò.

Nan fen pati sa a, mwen rekòmande pou w li Entwodiksyon nan pwogramasyon jwèt multijoueurs Brian Hook, ki kouvri anpil nan sijè yo diskite isit la.

Pwotokòl aplikasyon

Kounye a ke nou ka fè echanj done ant kliyan ak sèvè a, nou bezwen deside ki done yo transfere ak nan ki fòma.

Konplo a klasik se ke kliyan voye opinyon oswa aksyon nan sèvè a, ak sèvè a voye eta aktyèl jwèt la bay kliyan yo.

Sèvè a voye pa plen, men eta a filtre ak antite ki tou pre jwè a. Li fè sa pou twa rezon. Premyèman, eta total la ka twò gwo pou transmèt nan yon frekans segondè. Dezyèmman, kliyan yo sitou enterese nan done vizyèl ak odyo, paske pi fò nan lojik jwèt la simulation sou sèvè jwèt la. Twazyèmman, nan kèk jwèt jwè a pa bezwen konnen sèten done, tankou pozisyon nan lènmi an sou lòt bò a nan kat jeyografik la, paske otreman li ka santi pake ak konnen egzakteman ki kote yo deplase yo touye l '.

Serializasyon

Premye etap la se konvèti done nou vle voye yo (antre oswa eta jwèt) nan yon fòma apwopriye pou transmisyon. Pwosesis sa a rele serializasyon.

Lide a imedyatman vin nan tèt ou yo sèvi ak yon fòma moun lizib, tankou JSON oswa XML. Men, sa a pral konplètman rezèvwa epi li pral pran pi fò nan kanal la pou anyen.

Olye de sa, li rekòmande yo sèvi ak fòma binè a, ki se pi plis kontra enfòmèl ant. Sa vle di, pake yo pral sèlman gen kèk byte. Isit la nou dwe pran an kont pwoblèm nan lòd byte, ki ka diferan sou diferan òdinatè.

Pou seri done, ou ka itilize yon bibliyotèk, pou egzanp:

Jis asire w ke bibliyotèk la kreye achiv pòtab epi pran swen endianness.

Yon solisyon altènatif ta dwe aplike li tèt ou, li pa difisil, sitou si w ap itilize yon apwòch ki santre sou done nan kòd ou a. Anplis de sa, li pral pèmèt ou fè optimize ki pa toujou posib lè w ap itilize bibliyotèk la.

Glenn Fiedler te ekri de atik sou serializasyon: Pake lekti ak ekriti и Estrateji serializasyon.

Konpresyon

Kantite done transfere ant kliyan ak sèvè a limite pa Pleasant chanèl la. Konpresyon done pral pèmèt ou transfere plis done nan chak snapshot, ogmante pousantaj rafrechisman, oswa tou senpleman diminye kondisyon yo ki Pleasant.

Bit anbalaj

Premye teknik la se ti jan anbalaj. Li konsiste de itilize egzakteman kantite Bits ki nesesè pou dekri valè a vle. Pou egzanp, si ou gen yon enum ki ka gen 16 valè diferan, Lè sa a, olye pou yo yon byte antye (8 Bits), ou ka itilize jis 4 Bits.

Glenn Fiedler eksplike kijan pou aplike sa a nan dezyèm pati atik la. Pake lekti ak ekriti.

Bit anbalaj travay patikilyèman byen ak diskresyon, ki pral sijè a nan pwochen seksyon an.

Pran echantiyon

Pran echantiyon se yon teknik konpresyon pèt ki sèvi ak sèlman yon ti seri valè posib pou kode yon valè. Fason ki pi fasil pou aplike diskresyon se pa awondi nimewo k ap flote.

Glenn Fiedler (ankò!) montre kijan pou aplike diskresyon an pratik nan atik li a Konpresyon snapshot.

Algoritm konpresyon

Pwochen teknik la pral algorithm konpresyon san pèt.

Isit la, nan opinyon mwen, se twa algoritm ki pi enteresan ke ou bezwen konnen:

  • Huffman kodaj ak kòd precomputed, ki trè vit epi ki ka pwodwi bon rezilta. Li te itilize pou konprese pake nan motè rezo Quake3 la.
  • zlib se yon algorithm konpresyon objektif jeneral ki pa janm ogmante kantite done yo. Ki jan ou ka wè isit la, li te itilize nan yon varyete aplikasyon. Pou mete ajou eta yo, li ka redondants. Men, li ka vin an sou la men si ou bezwen voye byen, tèks long oswa tèren bay kliyan soti nan sèvè a.
  • Kopi longè kouri se pwobableman algorithm konpresyon ki pi senp, men li trè efikas pou sèten kalite done, epi li ka itilize kòm yon etap pre-pwosesis anvan zlib. Li espesyalman apwopriye pou konpresyon tèren ki gen ladan mozayik oswa voxels nan ki anpil eleman vwazen yo repete.

delta konpresyon

Teknik konpresyon final la se konpresyon delta. Li manti nan lefèt ke se sèlman diferans ki genyen ant eta aktyèl jwèt la ak dènye eta kliyan an te resevwa yo transmèt.

Li te premye itilize nan motè rezo Quake3 la. Men de atik ki eksplike kijan pou itilize li:

Glenn Fiedler te itilize li tou nan dezyèm pati atik li a. Konpresyon snapshot.

Chifreman

Anplis de sa, ou ka bezwen ankripte transmisyon enfòmasyon ant kliyan ak sèvè a. Gen plizyè rezon pou sa:

  • Konfidansyalite/Konfidansyalite: Moun k ap resevwa a sèlman kapab li mesaj yo epi pa gen okenn lòt sniffer rezo ki p ap kapab li yo.
  • otantifikasyon: yon moun ki vle jwe wòl yon jwè dwe konnen kle li.
  • prevansyon tronpe: li pral pi difisil pou jwè move yo kreye pwòp pakè tronpe yo, yo pral gen replike konplo a chifreman epi jwenn kle a (ki chanje sou chak koneksyon).

Mwen rekòmande pou itilize yon bibliyotèk pou sa. Mwen sijere itilize libsodyòm, paske li espesyalman senp epi li gen gwo leson patikilye. Nan enterè patikilye se leson patikilye a sou echanj kle, ki pèmèt ou jenere nouvo kle sou chak nouvo koneksyon.

Pwotokòl aplikasyon: Konklizyon

Sa a konkli pwotokòl aplikasyon an. Mwen kwè ke konpresyon se konplètman opsyonèl ak desizyon an yo sèvi ak li depann sèlman sou jwèt la ak Pleasant ki nesesè yo. Ankouraje, nan opinyon mwen, se obligatwa, men nan premye pwototip ou ka fè san li.

Lojik aplikasyon

Nou kapab kounye a mete ajou eta a nan kliyan an, men nou ka rankontre pwoblèm latansi. Jwè a, apre yo fin fè yon opinyon, bezwen tann pou yon aktyalizasyon eta jwèt soti nan sèvè a pou wè ki efè li te genyen sou mond lan.

Anplis, ant de mizajou eta, mond lan konplètman estatik. Si pousantaj aktyalizasyon eta a ba, Lè sa a, mouvman yo pral trè sakadé.

Gen plizyè teknik pou bese enpak pwoblèm sa a, epi mwen pral kouvri yo nan pwochen seksyon an.

Reta teknik lisaj

Tout teknik ki dekri nan seksyon sa a yo diskite an detay nan seri a. Vit ritm multijoueurs Gabriel Gambetta. Mwen rekòmande anpil lekti ekselan seri atik sa a. Li gen ladan tou yon Demo entèaktif pou wè ki jan teknik sa yo travay an pratik.

Premye teknik la se aplike rezilta opinyon an dirèkteman san yo pa tann yon repons nan men sèvè a. Li rele prediksyon bò kliyan. Sepandan, lè kliyan an resevwa yon aktyalizasyon nan men sèvè a, li dwe verifye ke prediksyon li te kòrèk. Si sa a se pa ka a, Lè sa a, li jis bezwen chanje eta li dapre sa li te resevwa nan men sèvè a, paske sèvè a se otoritè. Teknik sa a te premye itilize nan Quake. Ou ka li plis sou li nan atik la. Revizyon kòd Quake Engine Fabien Sanglars [tradiksyon sou Habré].

Dezyèm seri teknik yo itilize pou lis mouvman lòt antite ant de mizajou leta yo. Gen de fason pou rezoud pwoblèm sa a: entèpolasyon ak ekstrapolasyon. Nan ka entèpolasyon, yo pran de dènye eta yo epi yo montre tranzisyon an soti nan youn nan lòt la. Dezavantaj li se ke li lakòz yon ti fraksyon nan reta a, paske kliyan an toujou wè sa ki te pase nan tan lontan an. Ekstrapolasyon se sou predi kote antite yo ta dwe kounye a baze sou dènye eta kliyan an te resevwa. Dezavantaj li se ke si antite a konplètman chanje direksyon mouvman an, Lè sa a, pral gen yon gwo erè ant pwevwa a ak pozisyon reyèl la.

Dènye, teknik ki pi avanse, itil sèlman nan FPS, se konpansasyon lag. Lè w ap itilize konpansasyon lag, sèvè a pran an kont reta kliyan an lè li tire sou sib la. Pou egzanp, si yon jwè te fè yon headshot sou ekran yo, men an reyalite sib yo te nan yon lòt kote akòz reta a, Lè sa a, li ta enjis refize jwè a dwa pou yo touye akòz reta a. Se konsa, sèvè a retounen tan tounen nan lè jwè a te tire simulation sa jwè a te wè sou ekran yo epi tcheke pou yon kolizyon ant piki yo ak sib la.

Glenn Fiedler (tankou toujou!) te ekri yon atik an 2004 Rezo Fizik (2004), nan ki li te mete fondasyon an pou senkronizasyon nan simulation fizik ant sèvè a ak kliyan an. Nan 2014 li te ekri yon seri nouvo atik rezo fizik, nan ki li te dekri lòt teknik pou senkronize simulation fizik.

Genyen tou de atik sou wiki Valve a, Sous rezo multijoueurs и Metòd konpansasyon latansi nan konsepsyon ak optimize pwotokòl kliyan/sèvè nan jwèt la fè fas ak konpansasyon reta.

Tronpe Prevansyon

Gen de teknik prensipal prevansyon tronpe.

Premyèman, fè li pi difisil pou tricheurs yo voye pake move. Kòm mansyone pi wo a, yon bon fason yo aplike li se chifreman.

Dezyèmman, sèvè a autorité ta dwe sèlman resevwa kòmandman / opinyon / aksyon. Kliyan an pa ta dwe kapab chanje eta a sou sèvè a lòt pase pa voye opinyon. Lè sa a, sèvè a, chak fwa li resevwa opinyon, dwe tcheke li pou validite anvan ou aplike li.

Lojik aplikasyon: Konklizyon

Mwen rekòmande ke ou aplike yon fason pou simulation gwo latansi ak ba pousantaj rafrechisman pou ke ou ka teste konpòtman an nan jwèt ou a nan move kondisyon, menm lè kliyan an ak sèvè ap kouri sou menm machin nan. Sa a anpil senplifye aplikasyon an nan teknik atenuasyon reta.

Lòt Resous itil

Si ou vle eksplore lòt resous modèl rezo, ou ka jwenn yo isit la:

Sous: www.habr.com

Add nouvo kòmantè