Kwiiveki ezimbini ezidlulileyo bendisebenza kwi-injini ye-intanethi yomdlalo wam. Ngaphambi koku, ndandingazi nto konke konke malunga nokunxibelelana kwimidlalo, ndiye ndafunda amanqaku amaninzi kwaye ndenza iimvavanyo ezininzi zokuqonda zonke iikhonsepthi kwaye ndikwazi ukubhala eyam injini yenethiwekhi.
Kwesi sikhokelo, ndingathanda ukwabelana nawe ngeekhonsepthi ezahlukeneyo ekufuneka uzifunde ngaphambi kokuba ubhale eyakho injini yomdlalo, kunye nezona zixhobo zibalaseleyo kunye namanqaku okufunda ngazo.
Ngokubanzi, kukho iindidi ezimbini eziphambili zoyilo lwenethiwekhi: i-peer-to-peer kunye ne-client-server. Kwi-architecture ye-peer-to-peer (p2p), idatha idluliselwa phakathi kweziphi na izibini zabadlali abaxhunyiwe, ngelixa kwi-architecture ye-client-server, idatha idluliselwa kuphela phakathi kwabadlali kunye nomncedisi.
Nangona i-peer-to-peer architecture isasetyenziswa kweminye imidlalo, i-client-server ngumgangatho: kulula ukuyiphumeza, ifuna ububanzi betshaneli encinci, kwaye yenza kube lula ukukhusela ngokuchasene nokukopela. Ke ngoko, kwesi sifundo siza kugxila kulwakhiwo lwe-server-server.
Ngokukodwa, sinomdla kakhulu kwiiseva ezigunyazisiweyo: kwiinkqubo ezinjalo, umncedisi uhlala elungile. Umzekelo, ukuba umdlali ucinga ukuba ukwindawo ezilungelelanisiweyo (10, 5), kwaye umncedisi umxelele ukuba uku (5, 3), ngoko umxhasi kufuneka abuyisele indawo yakhe ngale ixelwe ngumncedisi, hayi ubugqwetha. ngokuchaseneyo. Ukusebenzisa iiseva ezigunyazisiweyo kwenza kube lula ukuchonga abaqhatha.
Iinkqubo zokudlala zenethiwekhi zineenxalenye ezintathu eziphambili:
- Iprothokholi yezothutho: indlela idatha ehanjiswa ngayo phakathi kwabaxhasi kunye nomncedisi.
- Iprotocol yesicelo: yintoni ehanjiswayo ukusuka kubathengi ukuya kumncedisi kwaye ukusuka kumncedisi ukuya kubaxumi kunye nokuba yeyiphi ifomathi.
- Ingqiqo yesicelo: indlela idatha edluliselwe ngayo isetyenziselwa ukuhlaziya imeko yabaxhasi kunye nomncedisi.
Kubaluleke kakhulu ukuqonda indima yecandelo ngalinye kunye nemingeni ehambelana nazo.
Iprothokholi yezothutho
Isinyathelo sokuqala kukukhetha iprotocol yokuthutha idatha phakathi komncedisi kunye nabaxhasi. Kukho iiprothokholi ezimbini ze-Intanethi zoku:
Ukuthelekiswa kwe-TCP kunye ne-UDP
Zombini i-TCP kunye ne-UDP zisekelwe
UDP nje umaleko obhityileyo phezu IP. Ngoko ke, inemida efanayo. Ngokwahlukileyo, i-TCP ineempawu ezininzi. Inika unxibelelwano oluthembekileyo, olucwangcisiweyo phakathi kweendawo ezimbini zokujonga iimpazamo. Ngenxa yoko, i-TCP ilula kakhulu kwaye isetyenziswa kwezinye iiprotocol ezininzi, umz.
Ukuqonda ukuba kutheni le misebenzi inokubangela ukubambezeleka, kufuneka siqonde ukuba i-TCP isebenza njani. Xa i-node yokuthumela ihambisa ipakethe kwi-node yokufumana, ilindele ukufumana ukuvuma (ACK). Ukuba emva kwexesha elithile aliyifumani (kuba ipakethe okanye ukuqinisekiswa kulahleka, okanye ngenxa yesinye isizathu), ngoko iphinda ithumele ipakethi. Ngaphezu koko, i-TCP iqinisekisa ukuba iipakethi zifunyenwe ngendlela echanekileyo, ngoko de kube ipakethe elahlekileyo ifunyenwe, zonke ezinye iipakethi azikwazi ukuqhutyelwa phambili, nokuba sele zifunyenwe ngumninimzi owamkelayo.
Kodwa njengoko unokucinga, i-latency kwimidlalo yabadlali abaninzi ibaluleke kakhulu, ngakumbi kwiintlobo ezigcwele isenzo njengeFPS. Kungenxa yoko le nto imidlalo emininzi isebenzisa i-UDP ngeprotocol yayo.
Iprotocol esekwe kwi-UDP yemveli inokusebenza ngakumbi kune-TCP ngezizathu ezahlukeneyo. Umzekelo, inokuphawula ezinye iipakethi njengezithenjiweyo kwaye ezinye njengezingathenjwa. Ke ngoko, ayikhathali nokuba ipakethi engathenjwayo ifikelela kummkeli. Okanye inokuqhuba imijelo yedatha emininzi ukwenzela ukuba ipakethi elahlekileyo kumsinga omnye ingacothi imijelo eseleyo. Umzekelo, kunokubakho intambo yegalelo lomdlali kunye nomnye umsonto wemiyalezo yencoko. Ukuba umyalezo wengxoxo ongangxamisekanga ulahlekile, awuyi kuthoba igalelo elingxamisekileyo. Okanye iprotocol yobunikazi inokuphumeza ukuthembeka ngokwahlukileyo kune-TCP ukuze isebenze ngakumbi kwindawo yomdlalo wevidiyo.
Ke, ukuba i-TCP ifunxa kakhulu, ke siya kudala eyethu iprotocol yezothutho esekwe kwi-UDP?
Inzima kancinci. Nangona i-TCP iphantse yancinci kwiinkqubo zenethiwekhi yokudlala, inokusebenza kakuhle kumdlalo wakho othile kwaye ikugcinele ixesha elixabisekileyo. Ngokomzekelo, i-latency isenokungabi ngumba womdlalo osekelwe ekujikeni okanye umdlalo onokudlalwa kuphela kwiinethiwekhi ze-LAN, apho i-latency kunye nokulahleka kwepakethi kuphantsi kakhulu kune-Intanethi.
Imidlalo emininzi eyimpumelelo, kuquka iWorld of Warcraft, iMinecraft kunye neTerraria, isebenzisa iTCP. Nangona kunjalo, uninzi lwe-FPSs zisebenzisa iiprothokholi ezisekwe kwi-UDP, ke siza kuthetha ngazo ngezantsi.
Ukuba uthatha isigqibo sokusebenzisa i-TCP, qiniseka ukuba ivaliwe
Ukufunda ngakumbi malunga nomahluko phakathi kwe-UDP kunye ne-TCP kumxholo wemidlalo yabadlali abaninzi, unokufunda inqaku likaGlenn Fiedler
Iprothokholi eyakho
Ke ufuna ukwenza eyakho iprotocol yezothutho, kodwa awazi ukuba uqale phi? Unethamsanqa kuba uGlenn Fiedler ubhale amanqaku amabini amangalisayo malunga noku. Uya kufumana ezininzi iingcamango ezihlakaniphile kuzo.
Inqaku lokuqala
Qaphela ukuba uGlenn Fiedler ungumxhasi omkhulu wokusebenzisa iprotocol yesiko esekelwe kwi-UDP. Kwaye emva kokufunda amanqaku akhe, mhlawumbi uya kwamkela uluvo lwakhe lokuba i-TCP ineziphene ezinzulu kwimidlalo yevidiyo, kwaye uya kufuna ukuphumeza iprotocol yakho.
Kodwa ukuba umtsha kuthungelwano, zenzele ubabalo kwaye usebenzise i-TCP okanye ithala leencwadi. Ukuphumeza ngempumelelo eyakho iprotocol yothutho, kufuneka ufunde okuninzi kwangaphambili.
Amathala eencwadi onxibelelwano
Ukuba ufuna into esebenza kakuhle kune-TCP, kodwa awufuni ukutyhubela ingxaki yokuphumeza eyakho iprotocol kwaye ungene kwiinkcukacha ezininzi, ungasebenzisa ithala leencwadi lothungelwano. Zininzi zazo:
yojimbo Glenn FiedlerI-RakNet , engasaxhaswayo, kodwa yifolokhwe yayoSLikeNet Kubonakala ngathi isasebenza.ENet lithala leencwadi elenzelwe iFPS yabadlali abaninziCube GameNetworkingSockets Ivalve
Andizange ndizame zonke, kodwa ndikhetha i-ENet kuba kulula ukuyisebenzisa kwaye inokuthenjwa. Ukongeza, inamaxwebhu acacileyo kunye nesifundo sabaqalayo.
Umgaqo wezoThutho: Ukuqukumbela
Ukushwankathela: kukho iiprothokholi ezimbini eziphambili zezothutho: i-TCP kunye ne-UDP. I-TCP inezinto ezininzi eziluncedo: ukuthembeka, ukugcinwa komyalelo wepakethi, ukufumanisa impazamo. I-UDP ayinayo yonke le nto, kodwa i-TCP ngokwendalo yayo iye yanda i-latency, engamkelekanga kweminye imidlalo. Oko kukuthi, ukuqinisekisa i-latency ephantsi, unokwenza iprotocol yakho esekelwe kwi-UDP okanye usebenzise ilayibrari esebenzisa iprotocol yezothutho kwi-UDP kwaye ilungiselelwe imidlalo yevidiyo yabadlali abaninzi.
Ukukhetha phakathi kwe-TCP, i-UDP kunye nethala leencwadi kuxhomekeke kwizinto ezininzi. Okokuqala, kwiimfuno zomdlalo: ngaba ifuna i-latency ephantsi? Okwesibini, kwiimfuno zeprotocol yesicelo: ngaba idinga iprotocol ethembekileyo? Njengoko siza kubona kwinxalenye elandelayo, kuyenzeka ukwenza iprotocol yesicelo apho iprotocol engathenjwa ifanelekile. Ekugqibeleni, kufuneka uthathele ingqalelo amava onjiniyela we-injini yenethiwekhi.
Ndineengcebiso ezimbini:
- I-Abstract yeprotocol yezothutho kwisicelo sonke kangangoko ukuze ikwazi ukutshintshwa ngaphandle kokubhala kwakhona yonke ikhowudi.
- Musa ukukhulisa kakhulu. Ukuba awuyiyo ingcali yenethiwekhi kwaye awuqinisekanga ukuba ufuna iprotocol yezothutho esekelwe kwi-UDP, ungaqala nge-TCP okanye ithala leencwadi elibonelela ngokuthembeka, kwaye emva koko uvavanye kwaye ulinganise ukusebenza. Ukuba kuvela iingxaki kwaye uqinisekile ukuba isizathu yiprotocol yezothutho, ngoko kusenokuba lixesha lokudala eyakho iprotocol yezothutho.
Ekupheleni kweli candelo, ndincoma ukuba ufunde
Iprothokholi yesicelo
Ngoku ukuba sinokutshintshisa idatha phakathi kwabaxhasi kunye nomncedisi, kufuneka sithathe isigqibo sokuba yeyiphi idatha yokudlulisa kunye nokuba yeyiphi ifomathi.
Iskimu sakudala kukuba abathengi bathumela igalelo okanye iintshukumo kumncedisi, kwaye umncedisi uthumela imeko yomdlalo wangoku kubaxumi.
Umncedisi akathumeli imo epheleleyo, kodwa imeko ehluziweyo ngamaqumrhu abekwe kufutshane nomdlali. Oku ukwenza ngezizathu ezithathu. Okokuqala, imeko epheleleyo inokuba nkulu kakhulu ukuba ingasasazwa ngamaxesha amaninzi. Okwesibini, abathengi banomdla kakhulu kwidatha ebonakalayo kunye neyomsindo, kuba uninzi lweengcamango zomdlalo zifaniswe kumncedisi womdlalo. Okwesithathu, kweminye imidlalo akukho mfuneko yokuba umdlali azazi iinkcukacha ezithile, umzekelo, indawo olukuyo utshaba kwelinye icala lemephu, kungenjalo unokusezela iipakethi kwaye azi kakuhle ukuba ashukume phi ukuze ambulale.
Ukulandelelana
Isinyathelo sokuqala kukuguqula idatha esifuna ukuyithumela (igalelo okanye imo yomdlalo) kwifomathi efanelekileyo yokudluliselwa. Le nkqubo ibizwa
Ingcinga ethi qatha engqondweni ngokukhawuleza kukusebenzisa ifomathi efundeka ngumntu, efana ne-JSON okanye i-XML. Kodwa oku kuya kungasebenzi ngokupheleleyo kwaye kuya kuchitha uninzi lwetshaneli.
Kuyacetyiswa ukuba kusetyenziswe ifomathi yokubini endaweni yoko, exinene kakhulu. Oko kukuthi, iipakethi ziya kuba nee-byte ezimbalwa kuphela. Kukho ingxaki ekufuneka iqwalaselwe apha
Ukucwangcisa idatha, ungasebenzisa ithala leencwadi, umzekelo:
IiFlatBuffers UphandoICap'n Proto Inkampani yesanticereal UShane Grant kunye noRandolph Voorhees
Qiniseka nje ukuba ithala leencwadi lenza ugcino oluphathwayo kwaye likhathalele ukunyamezela.
Esinye isisombululo kukuziphumeza ngokwakho; akukho nzima kakhulu, ngakumbi ukuba usebenzisa indlela yedatha kwikhowudi yakho. Ukongeza, iya kukuvumela ukuba wenze ulungelelwaniso olungasoloko lunokwenzeka xa usebenzisa ithala leencwadi.
UGlenn Fiedler wabhala amanqaku amabini malunga nokulandelelana:
Uxinzelelo
Ubungakanani bedatha edluliselwe phakathi kwabaxhasi kunye neseva inqunyelwe yi-bandwidth yesiteshi. Ukucinezelwa kwedatha kuya kukuvumela ukuba udlulise idatha eyongezelelweyo kwi-snapshot nganye, ukwandisa uhlaziyo rhoqo, okanye unciphise iimfuno zetshaneli.
Ukupakishwa kancinci
Ubuchule bokuqala kukupakisha kancinci. Iquka ukusebenzisa kanye inani lamasuntswana ayimfuneko ukuchaza ixabiso elifunekayo. Umzekelo, ukuba une-enum enokuba namaxabiso ahlukeneyo ali-16, ngoko endaweni yebyte epheleleyo (8 bits), ungasebenzisa nje amasuntswana ama-4.
UGlenn Fiedler uchaza indlela yokuphumeza oku kwinxalenye yesibini yenqaku
Ukupakishwa kwe-Bit kusebenza ngokukodwa kunye nesampuli, eya kuba sisihloko secandelo elilandelayo.
Isampuli
UGlenn Fiedler (kwakhona!) ubonisa indlela yokusebenzisa isampulu kwinqaku lakhe
Uxinzelelo lwe-algorithms
Indlela elandelayo iya kuba yi-algorithms yocinezelo olungalahlekiyo.
Apha, ngokoluvo lwam, zezona zi-algorithms zintathu zinomdla ekufuneka uzazi:
Huffman ikhowudi ngekhowudi ebhalwe kwangaphambili, ekhawuleza kakhulu kwaye inokuvelisa iziphumo ezilungileyo. Yayisetyenziselwa ukucinezela iipakethi kwi-injini ye-Quake3 networking.ububi yinjongo-jikelele yoxinzelelo lwealgorithm engaze yandise isixa sedatha. Uyabona njaniapha , isetyenziswe kwiintlobo ezahlukeneyo zezicelo. Isenokungafuneki kuhlaziyo lwamazwe. Kodwa kunokuba luncedo ukuba ufuna ukuthumela impahla, imibhalo emide okanye umhlaba kubathengi abasuka kumncedisi.Ukukopa ubude bokuqhuba - Oku mhlawumbi i-algorithm elula yokucinezela, kodwa iyasebenza kakhulu kwiintlobo ezithile zedatha, kwaye ingasetyenziswa njengenyathelo lokulungisa kwangaphambili phambi kwe-zlib. Ilungele ngakumbi ukucinezela umhlaba owenziwe ngeethayile okanye ii-voxels apho izinto ezininzi ezimeleneyo ziphindaphindwayo.
Uxinzelelo lweDelta
Ubuchule bokugqibela boxinzelelo luxinzelelo lwedelta. Iqulethwe kwinto yokuba kuphela iyantlukwano phakathi kwemeko yomdlalo wangoku kunye nemeko yokugqibela efunyenwe ngumxhasi idluliselwa.
Yaqala ukusetyenziswa kwi-injini yenethiwekhi ye-Quake3. Nanga amanqaku amabini achaza indlela yokuyisebenzisa:
Imodeli yothungelwano lweQuake3 UBrian HookInyikima ye-3 yoMthombo woPhononongo lweKhowudi yoMthombo: Imodeli yeNethiwekhi UFabien Sanglars [uguqulelo amanqaku ngoHabrΓ©, bona icandelo βImodeli yenethiwekhiβ]
UGlenn Fiedler naye wayisebenzisa kwinxalenye yesibini yenqaku lakhe
Uguqulelo oluntsonkothileyo
Ukongeza, unokufuna ukuguqulela ugqithiso lolwazi phakathi kwabaxhasi kunye nomncedisi. Kukho izizathu ezininzi zoku:
- ubumfihlo/ubumfihlo: imiyalezo inokufundwa kuphela ngumamkeli, kwaye akukho mntu wumbi ophunga inethiwekhi uya kukwazi ukuyifunda.
- authentication: umntu ofuna ukudlala indima yomdlali makasazi isitshixo sakhe.
- Ukuthintela ukukopela: Kuya kuba nzima ngakumbi kubadlali abakhohlakeleyo ukuba benze iipakethi zabo zokukopela, kuya kufuneka bavelise kwakhona iskimu sofihlo kwaye bafumane isitshixo (esitshintsha ngonxibelelwano ngalunye).
Ndicebisa ngamandla ukusebenzisa ithala leencwadi kule nto. Ndicebisa ukusebenzisa
Umgaqo weSicelo: Isiphelo
Oku kugqiba inkqubo yethu yesicelo. Ndiyakholelwa ukuba ukunyanzeliswa kukuzikhethela ngokupheleleyo kwaye isigqibo sokuyisebenzisa sixhomekeke kuphela kumdlalo kunye ne-bandwidth efunekayo. Ukufihlwa, ngokombono wam, kunyanzelekile, kodwa kwiprototype yokuqala ungayenza ngaphandle kwayo.
Ingqiqo yesicelo
Ngoku siyakwazi ukuhlaziya imeko kumxhasi, kodwa sinokungena kwimiba ye-latency. Umdlali, emva kokugqiba igalelo, kufuneka alinde imeko yomdlalo ukuba ihlaziywe kwiseva ukuze ibone ukuba yintoni impembelelo enayo kwihlabathi.
Ngaphezu koko, phakathi kohlaziyo lwelizwe ezimbini, umhlaba umile ngokupheleleyo. Ukuba izinga lohlaziyo lwelizwe liphantsi, ngoko ke ukunyakaza kuya kuba nzima kakhulu.
Kukho iindlela ezininzi zokunciphisa impembelelo yale ngxaki, kwaye ndiza kuzigubungela kwicandelo elilandelayo.
IiTekhnoloji zokuLatency Smoothing
Zonke iindlela zobugcisa ezichazwe kweli candelo zixutyushwa ngokubanzi kuluhlu
Indlela yokuqala kukusebenzisa isiphumo segalelo ngokuthe ngqo ngaphandle kokulinda impendulo evela kumncedisi. Ibizwa ngokuba uqikelelo lwecala lomxhasi. Nangona kunjalo, xa umxhasi efumana uhlaziyo oluvela kumncedisi, kufuneka aqinisekise ukuba ingqikelelo yakhe ichanekile. Ukuba oku akunjalo, ngoko kufuneka nje atshintshe imeko yakhe ngokwento ayifumene kumncedisi, kuba umncedisi unegunya. Obu buchule baqala ukusetyenziswa kwiQuake. Unokufunda ngakumbi ngayo kwinqaku
Iseti yesibini yobuchule isetyenziselwa ukugudisa intshukumo yamanye amaqumrhu phakathi kohlaziyo lwelizwe ezimbini. Kukho iindlela ezimbini zokusombulula le ngxaki: i-interpolation kunye ne-extrapolation. Kwimeko yokudibanisa, amazwe amabini okugqibela athatyathwa kwaye ukutshintshwa ukusuka kwelinye ukuya kwelinye kubonisiwe. Ukungalungi kwayo kukuba kubangela ukulibaziseka okuncinci kuba umxhasi uhlala ebona oko kwenzekayo kwixesha elidlulileyo. I-Extrapolation imalunga nokuqikelela ukuba amaziko afanele ukuphi ngoku asekwe kwimeko yokugqibela efunyenwe ngumxhasi. Ukungalungi kwayo kukuba ukuba iqumrhu litshintsha ngokupheleleyo isalathiso sokuhamba, ngoko kuya kubakho impazamo enkulu phakathi kokubikezelwa kunye neyona ndawo.
Obona buchwephesha bamva nje, obuphambili obuluncedo kuphela kwiFPS bu imbuyekezo lag. Xa usebenzisa imbuyekezo ye-lag, umncedisi uthatha ingqalelo ukulibaziseka komthengi xa edubula ekujoliswe kuyo. Umzekelo, ukuba umdlali wenze i-headshot kwiscreen sabo, kodwa eneneni itekeni yabo ibikwindawo eyahlukileyo ngenxa yokulibaziseka, kuya kuba yinto engalunganga ukukhanyela umdlali ilungelo lokubulala ngenxa yokulibaziseka. Ke ngoko, umncedisi ubuyisela umva ixesha kumzuzu agxothiweyo umdlali ukulinganisa into ebonwe ngumdlali kwiscreen sakhe kwaye ajonge ukungqubana phakathi kokudubula kwabo kunye nethagethi.
UGlenn Fiedler (njengesiqhelo!) Ubhale inqaku kwi-2004
Kukho amanqaku amabini kwiValve wiki,
Ukuthintela ukukopela
Kukho iindlela ezimbini eziphambili zokuthintela ukukopa.
Okokuqala: ukwenza kube nzima ngakumbi kubaqhathi ukuthumela iipakethi ezinobungozi. Njengoko kukhankanyiwe ngasentla, indlela elungileyo yokuphumeza oku kukufihlwa.
Okwesibini: umncedisi ogunyazisiweyo kufuneka afumane kuphela imiyalelo/igalelo/izenzo. Umxhasi akanakukwazi ukutshintsha imeko kumncedisi ngaphandle kokuthumela igalelo. Emva koko, ixesha ngalinye umncedisi efumana igalelo, kufuneka ajonge ukuba ngaba liyasebenza na phambi kokulisebenzisa.
Ingqiqo yesicelo: isiphelo
Ndincoma ukuba usebenzise indlela yokulinganisa ixesha elide kunye namazinga aphantsi okuhlaziya ukuze ukwazi ukuvavanya ukuziphatha komdlalo wakho kwiimeko ezimbi, nangona umxhasi kunye nomncedisi esebenza kwikhompyuter enye. Oku kuya kwenza lula kakhulu ukuphunyezwa kobuchule bokulibaziseka.
Ezinye izixhobo eziluncedo
Ukuba ungathanda ukujonga ezinye izixhobo kwiimodeli zenethiwekhi, ungazifumana apha:
Iblogi kaGlenn Fiedler -Ibhlog yakhe yonke ifanelekile ukuba ifundwe, kukho amanqaku amaninzi apho.kuyinto Onke amanqaku kwiitekhnoloji zenethiwekhi aqokelelwa.Uthungelwano lweMidlalo eyoyikekayo nguM. Fatih MAR luluhlu olubanzi lwamanqaku kunye neevidiyo kwiinjini zomdlalo wevidiyo we-intanethi.- Π
wiki ye r/gamedev subreddit Kwakhona kukho amakhonkco amaninzi aluncedo.
umthombo: www.habr.com