Za chitsanzo cha maukonde mu masewera kwa oyamba kumene

Za chitsanzo cha maukonde mu masewera kwa oyamba kumene
Kwa masabata awiri apitawa ndakhala ndikugwira ntchito pa injini yapaintaneti yamasewera anga. Izi zisanachitike, sindinkadziwa chilichonse chokhudza kugwirizana pamasewera, kotero ndidawerenga zolemba zambiri ndikuchita zoyeserera kuti ndimvetsetse malingaliro onse ndikutha kulemba injini yanga yapaintaneti.

Mu bukhuli, ndikufuna kugawana nanu malingaliro osiyanasiyana omwe muyenera kuphunzira musanalembe injini yanu yamasewera, komanso zida zabwino kwambiri ndi zolemba kuti muphunzire.

Mwambiri, pali mitundu iwiri ikuluikulu ya zomangamanga zama network: peer-to-peer ndi kasitomala-server. Muzomangamanga za anzawo (p2p), deta imasamutsidwa pakati pa osewera aliwonse olumikizidwa, pomwe mumapangidwe a seva ya kasitomala, deta imasamutsidwa pakati pa osewera ndi seva.

Ngakhale mamangidwe a anzawo akugwiritsidwabe ntchito m'masewera ena, kasitomala-seva ndiye muyezo: ndiyosavuta kuyigwiritsa ntchito, imafuna m'lifupi mwake, ndipo imapangitsa kukhala kosavuta kuteteza motsutsana ndi kubera. Chifukwa chake, mu phunziro ili tiwona kwambiri kamangidwe ka kasitomala-seva.

Makamaka, timakhudzidwa kwambiri ndi ma seva ovomerezeka: m'makina otere, seva imakhala yolondola nthawi zonse. Mwachitsanzo, ngati wosewera akuganiza kuti ali pamagulu (10, 5), ndipo seva imamuuza kuti ali pa (5, 3), ndiye kuti kasitomala ayenera kusintha malo ake ndi omwe adanenedwa ndi seva, osati zoipa. mosemphanitsa. Kugwiritsa ntchito ma seva ovomerezeka kumapangitsa kuti zikhale zosavuta kuzindikira omwe akubera.

Makina amasewera pa intaneti ali ndi zigawo zitatu zazikulu:

  • Transport protocol: momwe deta imasamutsidwira pakati pa makasitomala ndi seva.
  • Protocol yogwiritsira ntchito: zomwe zimatumizidwa kuchokera kwa makasitomala kupita ku seva komanso kuchokera ku seva kupita kwa makasitomala ndi mtundu wanji.
  • Mfundo yogwiritsira ntchito: momwe deta yosamutsira imagwiritsidwira ntchito kukonzanso mkhalidwe wa makasitomala ndi seva.

Ndikofunika kwambiri kumvetsetsa udindo wa gawo lirilonse ndi zovuta zomwe zimagwirizanitsidwa nazo.

Transport protocol

Gawo loyamba ndikusankha protocol yonyamula deta pakati pa seva ndi makasitomala. Pali ma protocol awiri apaintaneti a izi: TCP ΠΈ UDP. Koma mutha kupanga njira yanu yoyendera potengera imodzi mwazo kapena kugwiritsa ntchito laibulale yomwe imawagwiritsa ntchito.

Kuyerekeza kwa TCP ndi UDP

Zonse za TCP ndi UDP zimachokera ku IP. IP imalola kuti paketi itumizidwe kuchokera ku gwero kupita kwa wolandira, koma sizikutsimikizira kuti paketi yotumizidwayo idzafika kwa wolandirayo posachedwa, kuti idzafika kamodzi, komanso kuti mndandanda wa paketi udzafika molondola. dongosolo. Komanso, paketi ikhoza kukhala ndi deta yochepa, yoperekedwa ndi mtengo MTU.

UDP ndi gawo lochepa chabe pamwamba pa IP. Choncho, ili ndi malire ofanana. Mosiyana ndi izi, TCP ili ndi zinthu zambiri. Amapereka kulumikizana kodalirika, mwadongosolo pakati pa mfundo ziwiri ndikuwunika zolakwika. Chifukwa chake, TCP ndiyosavuta kwambiri ndipo imagwiritsidwa ntchito pama protocol ena ambiri, mwachitsanzo. HTTP, FTP ΠΈ SMTP. Koma zinthu zonsezi zimabwera pamtengo wake: kuchedwa.

Kuti timvetsetse chifukwa chake ntchitozi zingayambitse kuchedwa, tiyenera kumvetsetsa momwe TCP imagwirira ntchito. Node yotumiza ikatumiza paketi kumalo olandila, ikuyembekeza kulandira kuvomereza (ACK). Ngati patapita nthawi sichilandira (chifukwa paketi kapena kuvomereza kunatayika, kapena pazifukwa zina), ndiye kuti imatumizanso paketi. Komanso, TCP imatsimikizira kuti mapaketi amalandiridwa mwadongosolo loyenera, kotero mpaka paketi yotayika italandiridwa, mapaketi ena onse sangathe kukonzedwa, ngakhale atalandira kale ndi wolandira.

Koma monga momwe mungaganizire, latency pamasewera amasewera ambiri ndikofunikira kwambiri, makamaka mumitundu yodzaza ngati FPS. Ichi ndichifukwa chake masewera ambiri amagwiritsa ntchito UDP ndi protocol yawo.

Protocol yochokera ku UDP ikhoza kukhala yothandiza kwambiri kuposa TCP pazifukwa zosiyanasiyana. Mwachitsanzo, imatha kuyika mapaketi ena ngati odalirika pomwe ena ngati osadalirika. Choncho, sizimasamala ngati paketi yosadalirika ifika kwa wolandira. Kapena imatha kukonza mitsinje yambiri ya data kuti paketi yotayika mumtsinje umodzi isachedwetse mitsinje yotsalayo. Mwachitsanzo, pakhoza kukhala ulusi wolowetsa osewera ndi ulusi wina wa mauthenga ochezera. Ngati uthenga wochezera womwe si wofulumira utayika, sudzachedwetsa kulowetsa komwe kuli kofulumira. Kapena protocol ya eni ake atha kukhazikitsa kudalirika mosiyana ndi TCP kuti ikhale yogwira ntchito bwino pamasewera apakanema.

Ndiye, ngati TCP imayamwa kwambiri, ndiye kuti tipanga zoyendera zathu kutengera UDP?

Ndizovuta pang'ono. Ngakhale TCP ili pafupifupi yocheperako pamakina amasewera pamasewera, imatha kugwira ntchito bwino pamasewera anu enieni ndikukupulumutsirani nthawi yofunikira. Mwachitsanzo, kuchedwa sikungakhale vuto pamasewera otembenukira kapena masewera omwe atha kuseweredwa pamanetiweki a LAN, pomwe kutayika kwa paketi ndi kutsika kumakhala kotsika kwambiri kuposa pa intaneti.

Masewera ambiri opambana, kuphatikiza World of Warcraft, Minecraft ndi Terraria, amagwiritsa ntchito TCP. Komabe, ma FPS ambiri amagwiritsa ntchito ma protocol awo a UDP, ndiye tikambirana zambiri pansipa.

Ngati mwasankha kugwiritsa ntchito TCP, onetsetsani kuti ndiyoyimitsa Algorithm ya Nagle, chifukwa imasunga mapaketi musanatumize, zomwe zikutanthauza kuti imachulukitsa latency.

Kuti mudziwe zambiri za kusiyana pakati pa UDP ndi TCP pamasewera ambiri, mutha kuwerenga nkhani ya Glenn Fiedler. UDP vs. TCP.

Protocol yanu

Ndiye mukufuna kupanga mayendedwe anu, koma osadziwa koyambira? Muli ndi mwayi chifukwa Glenn Fiedler walemba zolemba ziwiri zodabwitsa za izi. Mudzapeza malingaliro ambiri anzeru mwa iwo.

Nkhani yoyamba Networking kwa Game Programmers 2008, yosavuta kuposa yachiwiri, Kupanga Game Network Protocol 2016. Ndikupangira kuti muyambe ndi wamkulu.

Zindikirani kuti Glenn Fiedler ndiwothandizira kwambiri kugwiritsa ntchito protocol yokhazikitsidwa ndi UDP. Ndipo mutatha kuwerenga nkhani zake, mudzatengera maganizo ake kuti TCP ili ndi zolakwika zazikulu pamasewera a kanema, ndipo mudzafuna kugwiritsa ntchito ndondomeko yanu.

Koma ngati ndinu watsopano pamaneti, dzichitireni zabwino ndikugwiritsa ntchito TCP kapena laibulale. Kuti mugwiritse ntchito bwino protocol yanu yamayendedwe, muyenera kuphunzira zambiri pasadakhale.

Network library

Ngati mukufuna china chake chothandiza kwambiri kuposa TCP, koma simukufuna kudutsa m'mavuto akugwiritsa ntchito ndondomeko yanu ndikupita mwatsatanetsatane, mutha kugwiritsa ntchito laibulale yapaintaneti. Pali ambiri aiwo:

Sindinawayese onse, koma ndimakonda ENet chifukwa ndiyosavuta kugwiritsa ntchito komanso yodalirika. Kuphatikiza apo, ili ndi zolemba zomveka bwino komanso phunziro la oyamba kumene.

Mayendedwe Protocol: Mapeto

Mwachidule: pali njira ziwiri zazikulu zoyendera: TCP ndi UDP. TCP ili ndi zinthu zambiri zothandiza: kudalirika, kusunga madongosolo a paketi, kuzindikira zolakwika. UDP ilibe zonsezi, koma TCP mwa chikhalidwe chake yawonjezera latency, zomwe ndizosavomerezeka pamasewera ena. Ndiko kuti, kuti mutsimikizire kutsika kwa latency, mutha kupanga protocol yanu kutengera UDP kapena kugwiritsa ntchito laibulale yomwe imagwiritsa ntchito protocol yoyendera pa UDP ndipo imasinthidwa kuti ikhale masewera a makanema ambiri.

Kusankha pakati pa TCP, UDP ndi laibulale kumatengera zinthu zingapo. Choyamba, kuchokera pazosowa zamasewera: kodi imafunikira latency yochepa? Kachiwiri, kuchokera pazofunikira za protocol: kodi ikufunika protocol yodalirika? Monga tiwona mu gawo lotsatira, ndizotheka kupanga pulogalamu yofunsira yomwe protocol yosadalirika ndiyoyenera. Pomaliza, muyenera kuganiziranso zomwe zinachitikira wopanga injini ya netiweki.

Ndili ndi malangizo awiri:

  • Chongani protocol yoyendera kuchokera ku pulogalamu yonse momwe mungathere kuti isinthidwe mosavuta popanda kulembanso nambala yonse.
  • Osakulitsa kwambiri. Ngati simuli katswiri wapaintaneti ndipo simukudziwa ngati mukufuna njira yoyendera yochokera ku UDP, mutha kuyamba ndi TCP kapena laibulale yomwe imapereka kudalirika, ndikuyesa ndikuyesa magwiridwe antchito. Ngati mavuto abuka ndipo muli ndi chidaliro kuti chifukwa chake ndi protocol yamayendedwe, ndiye kuti ikhoza kukhala nthawi yopangira njira yanu yoyendera.

Pamapeto pa gawo ili, ndikupangira kuti muwerenge Chiyambi cha Multiplayer Game Programming yolembedwa ndi Brian Hook, yomwe ili ndi nkhani zambiri zomwe zafotokozedwa pano.

Protocol yogwiritsira ntchito

Tsopano kuti titha kusinthanitsa deta pakati pa makasitomala ndi seva, tiyenera kusankha deta yomwe tingasamutsire komanso momwe tingasinthire.

Chiwembu chapamwamba ndi chakuti makasitomala amatumiza zolowetsa kapena zochita ku seva, ndipo seva imatumiza masewera omwe alipo kwa makasitomala.

Seva imatumiza osati dziko lonse, koma dziko losefedwa ndi mabungwe omwe ali pafupi ndi wosewera mpira. Amachita zimenezi pa zifukwa zitatu. Choyamba, mkhalidwe wathunthu ukhoza kukhala waukulu kwambiri kuti usafalikire pafupipafupi. Kachiwiri, makasitomala amakhudzidwa kwambiri ndi zowonera komanso zomvera, chifukwa malingaliro ambiri amasewera amafanizidwa pa seva yamasewera. Chachitatu, m’masewera ena wosewera mpira safunikira kudziwa zambiri, mwachitsanzo, malo a mdani kumbali ina ya mapu, apo ayi akhoza kununkhiza mapaketi ndi kudziwa komwe angasunthire kuti amuphe.

Kusamutsa

Choyamba ndikusintha zomwe tikufuna kutumiza (zolowetsa kapena masewera) kukhala mawonekedwe oyenera kutumizidwa. Njirayi imatchedwa serialization.

Lingaliro lomwe limabwera m'maganizo nthawi yomweyo ndikugwiritsa ntchito mawonekedwe owerengeka ndi anthu, monga JSON kapena XML. Koma izi sizikhala zothandiza kwenikweni ndipo zidzawononga njira zambiri.

Ndikofunikira kugwiritsa ntchito mawonekedwe a binary m'malo mwake, omwe amakhala ophatikizika kwambiri. Ndiye kuti, mapaketi azikhala ndi ma byte ochepa. Pali vuto loti muganizire apa dongosolo la byte, zomwe zingasiyane pamakompyuta osiyanasiyana.

Kusanja deta, mungagwiritse ntchito laibulale, mwachitsanzo:

Ingoonetsetsani kuti laibulaleyo imapanga zosungira zonyamula katundu ndipo imasamala za kutha.

Njira ina ndiyo kukhazikitsa nokha; sizovuta, makamaka ngati mugwiritsa ntchito njira yotsatsira deta yanu. Kuphatikiza apo, zikuthandizani kuti muzitha kukhathamiritsa zomwe sizingatheke mukamagwiritsa ntchito laibulale.

Glenn Fiedler adalemba zolemba ziwiri zokhuza kusanja: Phukusi Lowerenga ndi Kulemba ΠΈ Njira Zotsatsira.

Kupanikizika

Kuchuluka kwa data yomwe imasamutsidwa pakati pa makasitomala ndi seva imachepetsedwa ndi bandwidth ya njira. Kuphatikizika kwa data kumakupatsani mwayi wosamutsa zambiri pazithunzi zilizonse, kuwonjezera kuchuluka kwa zosintha, kapena kungochepetsa zomwe mukufuna.

Kupaka pang'ono

Njira yoyamba ndikulongedza pang'ono. Zimaphatikizapo kugwiritsa ntchito ndendende kuchuluka kwa ma bits omwe ndi ofunikira kufotokoza mtengo womwe mukufuna. Mwachitsanzo, ngati muli ndi enum yomwe imatha kukhala ndi ma 16 osiyanasiyana, ndiye kuti m'malo mwa baiti yonse (8 bits), mutha kugwiritsa ntchito ma bits anayi okha.

Glenn Fiedler akufotokoza momwe angagwiritsire ntchito izi mu gawo lachiwiri la nkhaniyi Phukusi Lowerenga ndi Kulemba.

Kulongedza pang'ono kumagwira ntchito bwino makamaka ndi zitsanzo, zomwe zidzakhala mutu wa gawo lotsatira.

Zitsanzo

Zitsanzo ndi njira yopondereza yotayika yomwe imagwiritsa ntchito kagawo kakang'ono kazinthu zotheka kuyika mtengo. Njira yosavuta yogwiritsira ntchito discretization ndikuzungulira manambala oyandama.

Glenn Fiedler (kachiwiri!) akuwonetsa momwe angagwiritsire ntchito zitsanzo m'nkhani yake Kuphatikizika kwazithunzi.

Compress algorithms

Njira yotsatira idzakhala ma aligorivimu osataya.

Nawa, mwa lingaliro langa, pali ma algorithms atatu osangalatsa kwambiri omwe muyenera kudziwa:

  • Huffman kodi ndi code yopangidwa kale, yomwe imathamanga kwambiri ndipo imatha kupanga zotsatira zabwino. Idagwiritsidwa ntchito kupondereza mapaketi mu injini yapaintaneti ya Quake3.
  • zlib ndi wamba-cholinga psinjika aligorivimu kuti samawonjezera kuchuluka kwa deta. Mukuwona bwanji? apa, wakhala akugwiritsidwa ntchito zosiyanasiyana. Zitha kukhala zosafunikira pakukonzanso mayiko. Koma zitha kukhala zothandiza ngati mukufuna kutumiza katundu, zolemba zazitali kapena malo kwa makasitomala kuchokera pa seva.
  • Kukopera kutalika kwake - Ichi mwina ndi njira yosavuta yoponderezera, koma ndiyothandiza kwambiri pamitundu ina ya data, ndipo ingagwiritsidwe ntchito ngati sitepe yokonzedweratu pamaso pa zlib. Ndiwoyenera kwambiri kupondereza mtunda wopangidwa ndi matailosi kapena ma voxel momwe zinthu zambiri zoyandikana zimabwerezedwa.

Delta compression

Njira yomaliza yopondereza ndi delta compression. Zili ndi mfundo yakuti kusiyana kokha pakati pa masewera omwe alipo panopa ndi dziko lomaliza lolandiridwa ndi kasitomala amafalitsidwa.

Inagwiritsidwa ntchito koyamba mu injini ya Quake3 network. Nazi nkhani ziwiri zofotokoza momwe mungagwiritsire ntchito:

Glenn Fiedler adagwiritsanso ntchito gawo lachiwiri la nkhani yake Kuphatikizika kwazithunzi.

Kubisa

Kuphatikiza apo, mungafunike kubisa kusamutsa kwa chidziwitso pakati pa makasitomala ndi seva. Pali zifukwa zingapo zochitira izi:

  • zachinsinsi/chinsinsi: mauthenga atha kuwerengedwa ndi wolandira, ndipo palibe munthu wina amene amanunkhiza pa netiweki amene angawerenge.
  • authentication: munthu amene akufuna kukhala wosewera ayenera kudziwa makiyi ake.
  • Kupewa kunyenga: Zidzakhala zovuta kwambiri kwa osewera oyipa kuti adzipangire okha phukusi lachinyengo, amayenera kupanganso dongosolo la encryption ndikupeza kiyi (yomwe imasintha ndi kulumikizana kulikonse).

Ndikupangira kugwiritsa ntchito laibulale pa izi. Ndikupangira kugwiritsa ntchito wothandizira, chifukwa ndiyosavuta kwambiri ndipo ili ndi maphunziro abwino kwambiri. Chosangalatsa kwambiri ndi phunziroli kusinthana kwachinsinsi, zomwe zimakupatsani mwayi wopanga makiyi atsopano ndi kulumikizana kwatsopano kulikonse.

Ndondomeko Yogwiritsira Ntchito: Mapeto

Izi zimamaliza pulogalamu yathu yofunsira. Ndikukhulupirira kuti kuponderezana ndikosankha kwathunthu ndipo chisankho chochigwiritsa ntchito chimadalira pamasewera ndi bandwidth yofunikira. Kubisa, m'malingaliro mwanga, ndikoyenera, koma muzojambula zoyambirira mungathe kuchita popanda izo.

Kugwiritsa ntchito logic

Tsopano titha kusintha dziko mwa kasitomala, koma zitha kukumana ndi zovuta za latency. Wosewerayo, akamaliza kulowetsamo, akuyenera kudikirira kuti masewerawa asinthe kuchokera pa seva kuti awone zomwe zidakhudza dziko lapansi.

Komanso, pakati pa zosintha ziwiri za boma, dziko lapansi silimakhazikika. Ngati chiwerengero cha kusintha kwa boma ndi chochepa, ndiye kuti mayendedwe adzakhala ovuta kwambiri.

Pali njira zingapo zochepetsera zovuta za vutoli, ndipo ndiziphimba mu gawo lotsatira.

Njira Zotsitsimula za Latency

Njira zonse zomwe zafotokozedwa mu gawoli zikufotokozedwa mwatsatanetsatane mndandanda Osewera Othamanga Kwambiri Gabriel Gambetta. Ndikupangira kuwerenga mndandanda wabwino kwambiri wankhani. Zimaphatikizanso chiwonetsero chazithunzi chomwe chimakulolani kuwona momwe njirazi zimagwirira ntchito.

Njira yoyamba ndiyo kugwiritsa ntchito zotsatira zolowetsa mwachindunji popanda kuyembekezera yankho kuchokera kwa seva. Amatchedwa kasitomala-mbali kulosera. Komabe, kasitomala akalandira zosintha kuchokera ku seva, ziyenera kutsimikizira kuti zomwe akunenazo zinali zolondola. Ngati sizili choncho, ndiye kuti amangofunika kusintha dziko lake malinga ndi zomwe adalandira kuchokera kwa seva, chifukwa seva ndi yolamulira. Njira imeneyi idagwiritsidwa ntchito koyamba pa Quake. Mukhoza kuwerenga zambiri za izo m'nkhani Ndemanga ya Quake Engine code Fabien Sanglars [kumasulira pa Habre].

Njira yachiwiri imagwiritsidwa ntchito kuwongolera kayendetsedwe kazinthu zina pakati pa zosintha ziwiri za boma. Pali njira ziwiri zothetsera vutoli: kutanthauzira ndi extrapolation. Pankhani ya kutanthauzira, zigawo ziwiri zomaliza zimatengedwa ndipo kusintha kuchokera kumodzi kupita ku imzake kukuwonetsedwa. Zoyipa zake ndikuti zimayambitsa kuchedwa pang'ono chifukwa kasitomala amawona zomwe zidachitika m'mbuyomu. Extrapolation ndi za kulosera kumene mabungwe ayenera kukhala tsopano kutengera dziko lomaliza kulandiridwa ndi kasitomala. Choyipa chake ndi chakuti ngati bungwe likusintha kwathunthu njira yoyendetsera, ndiye kuti padzakhala cholakwika chachikulu pakati pa zoneneratu ndi malo enieni.

Njira yaposachedwa kwambiri, yothandiza kwambiri mu FPS ndi chipukuta misozi. Pogwiritsa ntchito kubweza kwa lag, seva imaganizira kuchedwa kwa kasitomala pamene ikuwombera pa chandamale. Mwachitsanzo, ngati wosewera mpira wajambula pamutu pa zenera lake, koma kwenikweni cholinga chake chinali pamalo ena chifukwa chakuchedwa, ndiye kuti sikungakhale chilungamo kukana wosewerayo ufulu wopha chifukwa chakuchedwa. Chifukwa chake, seva imabwezeretsanso nthawi kubwerera pomwe wosewera adawombera kuti ayese zomwe wosewerayo adawona pazenera lawo ndikuwunika ngati kugundana pakati pa kuwombera kwawo ndi zomwe akufuna.

Glenn Fiedler (monga nthawi zonse!) adalemba nkhani mu 2004 Network Physics (2004), momwe adayika maziko olumikizirana mafanizidwe a fiziki pakati pa seva ndi kasitomala. Mu 2014 adalemba nkhani zatsopano Networking Physics, yomwe inafotokoza njira zina zogwirizanitsira mafanizidwe a physics.

Palinso zolemba ziwiri pa Valve wiki, Source Multiplayer Networking ΠΈ Njira Zolipiritsa Zakuchedwa mu Kalata / Seva Pamasewera a Protocol Design ndi Kukhathamiritsa omwe amaganizira za malipiro akachedwa.

Kupewa kubera

Pali njira ziwiri zazikulu zopewera kubera.

Choyamba: kupangitsa kuti zikhale zovuta kwa obera kutumiza mapaketi oyipa. Monga tafotokozera pamwambapa, njira yabwino yochitira izi ndi kubisa.

Chachiwiri: seva yaulamuliro imangolandira malamulo/zolowetsa/zochita. Wothandizira sayenera kusintha mawonekedwe pa seva kupatula kutumiza zolowetsa. Kenako, nthawi iliyonse seva ikalandira zolowetsa, iyenera kuyang'ana ngati ili yovomerezeka isanagwiritse ntchito.

Mfundo yogwiritsira ntchito: mapeto

Ndikupangira kuti mugwiritse ntchito njira yotsatsira ma latency apamwamba komanso mitengo yotsitsimula yotsika kuti mutha kuyesa machitidwe amasewera anu m'malo ovuta, ngakhale kasitomala ndi seva akugwira ntchito pakompyuta yomweyo. Izi zithandizira kwambiri kukhazikitsa njira zochepetsera zosalala.

Zida Zina Zothandizira

Ngati mungafune kufufuza zinthu zina pamitundu yama netiweki, mutha kuzipeza apa:

Source: www.habr.com

Kuwonjezera ndemanga