Megapack: Jinsi Factoro Ilivyotatua Tatizo la Wachezaji Wengi 200

Megapack: Jinsi Factoro Ilivyotatua Tatizo la Wachezaji Wengi 200
Mnamo Mei mwaka huu nilishiriki kama mchezaji katika Matukio ya MMO KatherineOfSky. Niligundua kuwa idadi ya wachezaji inapofikia idadi fulani, kila dakika chache baadhi yao "huanguka". Kwa bahati kwako (lakini sio kwangu), nilikuwa mmoja wa wachezaji ambao walijitenga kila wakati, hata kwa muunganisho mzuri. Nilichukua hii kama changamoto ya kibinafsi na nikaanza kutafuta sababu za shida. Baada ya wiki tatu za utatuzi, majaribio na marekebisho, hitilafu hatimaye ilirekebishwa, lakini safari haikuwa rahisi hivyo.

Matatizo na michezo ya wachezaji wengi ni vigumu sana kufuatilia. Kawaida hutokea chini ya vigezo maalum vya mtandao na hali maalum sana za mchezo (katika kesi hii, kuwa na wachezaji zaidi ya 200). Na hata wakati tatizo linaweza kutolewa tena, haliwezi kutatuliwa ipasavyo kwa sababu kuweka sehemu za kukatiza husimamisha mchezo, huchanganya vipima muda, na kwa kawaida husababisha muunganisho kuisha muda. Lakini shukrani kwa kuendelea na chombo cha ajabu kinachoitwa clumsy Nilifanikiwa kujua nini kinaendelea.

Kwa kifupi, kutokana na hitilafu na utekelezaji usiokamilika wa uigaji wa hali ya kusubiri, mteja wakati mwingine angejikuta katika hali ambayo ilimbidi kutuma pakiti ya mtandao inayojumuisha vitendo vya uteuzi wa mchezaji wa takriban vipengele 400 vya mchezo katika mzunguko wa saa moja ( tunaita hii "mega-packet"). Seva lazima basi isipokee tu vitendo hivi vyote vya kuingiza data kwa usahihi, lakini pia itume kwa wateja wengine wote. Ikiwa una wateja 200, hii inakuwa shida haraka. Kiungo cha seva huziba haraka, na kusababisha upotevu wa pakiti na msururu wa pakiti zilizoombwa upya. Kuchelewesha hatua ya ingizo basi husababisha wateja zaidi kutuma megapackets, na kusababisha maporomoko ya theluji kuwa makubwa zaidi. Wateja wenye bahati wanaweza kupona; wengine wote huanguka.

Megapack: Jinsi Factoro Ilivyotatua Tatizo la Wachezaji Wengi 200
Shida ilikuwa ya msingi sana na ilinichukua wiki 2 kuisuluhisha. Ni ya kiufundi sana, kwa hivyo nitaelezea maelezo ya kiufundi ya juisi hapa chini. Lakini kwanza, unahitaji kujua kwamba tangu toleo la 0.17.54, iliyotolewa Juni 4, mbele ya matatizo ya muda ya uunganisho, wachezaji wengi wamekuwa imara zaidi, na ucheleweshaji wa kujificha umekuwa buggy kidogo (chini ya kushuka na teleporting). Nimebadilisha pia njia ya kufichwa kwa vita na ninatumai hii itafanya iwe laini kidogo.

Kifurushi cha Mega cha Wachezaji wengi - Maelezo ya Kiufundi

Ili kuiweka kwa urahisi, wachezaji wengi katika mchezo hufanya kazi kama hii: wateja wote huiga hali ya mchezo, kupokea na kutuma ingizo la mchezaji pekee (linaloitwa "vitendo vya ingizo", Vitendo vya Kuingiza) Kazi kuu ya seva ni kusambaza Vitendo vya Kuingiza na udhibiti kwamba wateja wote hufanya vitendo sawa katika mzunguko wa saa sawa. Unaweza kusoma zaidi kuhusu hili katika chapisho FFF-149.

Kwa kuwa seva lazima ifanye maamuzi kuhusu hatua za kufanya, vitendo vya mchezaji husogea takriban kwenye njia hii: kitendo cha mchezaji -> mteja wa mchezo -> mtandao -> seva -> mtandao -> mteja wa mchezo. Hii inamaanisha kuwa kitendo cha kila mchezaji hufanywa tu baada ya kufanya safari ya kwenda na kurudi kwenye mtandao. Kwa sababu hii, mchezo ungeonekana kuwa wa polepole sana, kwa hivyo karibu mara tu baada ya kuanzishwa kwa wachezaji wengi kwenye mchezo, utaratibu ulianzishwa ili kuficha ucheleweshaji. Kuficha ucheleweshaji huiga ingizo la mchezaji bila kuzingatia vitendo vya wachezaji wengine na maamuzi ya seva.

Megapack: Jinsi Factoro Ilivyotatua Tatizo la Wachezaji Wengi 200
Factoro ina hali ya mchezo Mchezo Jimbo ni hali kamili ya kadi, mchezaji, huluki na kila kitu kingine. Inaigwa kwa uthabiti kwa wateja wote kulingana na vitendo vilivyopokelewa kutoka kwa seva. Hali ya mchezo ni takatifu, na ikiwa itaanza kutofautiana na seva au mteja mwingine yeyote, basi usawazishaji hutokea.

Lakini Mchezo Jimbo tuna hali ya kuchelewa Jimbo la Kuchelewa. Ina sehemu ndogo ya hali ya chini. Jimbo la Kuchelewa si takatifu na inawakilisha tu picha ya jinsi hali ya mchezo itakavyokuwa katika siku zijazo kulingana na ingizo za wachezaji Vitendo vya Kuingiza.

Kwa kusudi hili, tunahifadhi nakala ya kuundwa Vitendo vya Kuingiza kwenye foleni ya kuchelewa.

Megapack: Jinsi Factoro Ilivyotatua Tatizo la Wachezaji Wengi 200
Hiyo ni, mwisho wa mchakato kwa upande wa mteja picha inaonekana kama hii:

  1. Tunatuma maombi Vitendo vya Kuingiza wachezaji wote Mchezo Jimbo jinsi vitendo hivi vya ingizo vilipokelewa kutoka kwa seva.
  2. Tunaondoa kila kitu kwenye foleni ya kuchelewa Vitendo vya Kuingiza, ambayo, kulingana na seva, tayari imetumika Mchezo Jimbo.
  3. Futa Jimbo la Kuchelewa na kuiweka upya ili ionekane sawa na Mchezo Jimbo.
  4. Tunatumia vitendo vyote kutoka kwa foleni ya kuchelewa hadi Jimbo la Kuchelewa.
  5. Kulingana na data Mchezo Jimbo ΠΈ Jimbo la Kuchelewa Tunatoa mchezo kwa mchezaji.

Haya yote yanarudiwa kwa kila kipimo.

Ngumu sana? Usipumzike, hii sio yote. Ili kufidia miunganisho isiyoaminika ya Mtandao, tumeunda njia mbili:

  • Kupe zilizokosa: seva inapoamua hivyo Vitendo vya Kuingiza atauawa kwa mpigo wa mchezo, basi ikiwa hakupokea Vitendo vya Kuingiza mchezaji fulani (kwa mfano, kwa sababu ya kuchelewa kuongezeka), hatangoja, lakini atamjulisha mteja huyu "Sikuzingatia Vitendo vya Kuingiza, nitajaribu kuziongeza kwenye upau unaofuata.” Hii imefanywa ili kutokana na matatizo na uunganisho (au kompyuta) ya mchezaji mmoja, sasisho la ramani haipunguzi kwa kila mtu mwingine. Inafaa kuzingatia hilo Vitendo vya Kuingiza hazipuuzwi, bali huwekwa kando tu.
  • Ucheleweshaji kamili wa safari ya kwenda na kurudi: Seva inajaribu kukisia muda wa kusubiri wa kwenda na kurudi kati ya mteja na seva ni kwa kila mteja. Kila baada ya sekunde 5, hujadiliana na mteja muda mpya wa kusubiri ikihitajika (kulingana na jinsi muunganisho ulivyofanya hapo awali), na huongeza au kupunguza muda wa kusubiri wa kurudi na kurudi ipasavyo.

Kwao wenyewe, taratibu hizi ni rahisi sana, lakini zinapotumiwa pamoja (ambayo mara nyingi hutokea kwa matatizo ya uunganisho), mantiki ya kanuni inakuwa vigumu kusimamia na kwa kesi nyingi za makali. Zaidi ya hayo, taratibu hizi zinapoanza kutumika, seva na foleni ya kuchelewa lazima itekeleze vyema maalum Kitendo cha Kuingiza kuitwa StopMovementInTheNextTick. Shukrani kwa hili, ikiwa kuna matatizo na uunganisho, mhusika hawezi kukimbia peke yake (kwa mfano, mbele ya treni).

Sasa tunahitaji kukueleza jinsi uteuzi wa chombo unavyofanya kazi. Moja ya aina zinazopitishwa Kitendo cha Kuingiza ni mabadiliko katika hali ya uteuzi wa huluki. Inaambia kila mtu ni chombo gani mchezaji anaelea juu. Kama unavyoweza kufikiria, hii ni mojawapo ya hatua za kawaida za kuingiza data zinazotumwa na wateja, kwa hivyo ili kuhifadhi kipimo data, tumekiboresha ili kuchukua nafasi kidogo iwezekanavyo. Jinsi inavyofanya kazi ni kwamba kila huluki inapochaguliwa, badala ya kuhifadhi viwianishi kamili, vya usahihi wa hali ya juu, mchezo huhifadhi uwiano wa jamaa wa usahihi wa chini kutoka kwa uteuzi uliopita. Hii inafanya kazi vizuri kwa sababu chaguo za panya huwa karibu sana na uteuzi uliopita. Hii inaongeza mahitaji mawili muhimu: Vitendo vya Kuingiza Hazipaswi kamwe kurukwa na lazima zikamilishwe kwa mpangilio sahihi. Mahitaji haya yanakidhiwa Mchezo Jimbo. Lakini tangu kazi Hali ya kuchelewa katika "kuonekana vizuri" kwa mchezaji, hawajaridhika katika hali ya kuchelewa. Jimbo la Kuchelewa haizingatii kesi nyingi za makali, inayohusishwa na kuruka mizunguko ya saa na kubadilisha ucheleweshaji wa maambukizi ya kwenda na kurudi.

Unaweza tayari kukisia hii inaenda wapi. Hatimaye tunaanza kuona sababu za tatizo la megapack. Mzizi wa tatizo ni kwamba mantiki ya uteuzi wa chombo hutegemea Jimbo la Kuchelewa, na hali hii huwa haina taarifa sahihi kila wakati. Kwa hivyo, megapacket hutolewa kitu kama hiki:

  1. Mchezaji ana matatizo ya muunganisho.
  2. Taratibu za kuruka mizunguko ya saa na kudhibiti ucheleweshaji wa usafirishaji wa kwenda na kurudi zinatumika.
  3. Foleni ya hali ya kuchelewa haizingatii njia hizi. Hii husababisha baadhi ya vitendo kuondolewa kabla ya wakati au kutekelezwa kwa mpangilio usio sahihi, na kusababisha makosa Jimbo la Kuchelewa.
  4. Mchezaji ana tatizo la muunganisho na, ili kupata seva, huiga hadi mizunguko 400.
  5. Katika kila tiki, kitendo kipya, kubadilisha uteuzi wa huluki, hutolewa na kutayarishwa kwa ajili ya kutumwa kwa seva.
  6. Mteja hutuma mega-batch ya mabadiliko ya uteuzi wa chombo 400+ kwenye seva (na kwa vitendo vingine: majimbo ya risasi, majimbo ya kutembea, nk pia yanakabiliwa na tatizo hili).
  7. Seva hupokea vitendo 400 vya kuingiza. Kwa kuwa hairuhusiwi kuruka vitendo vyovyote vya ingizo, inaamuru wateja wote kutekeleza vitendo hivyo na kuzituma kwenye mtandao.

Ajabu ni kwamba utaratibu ulioundwa kuokoa kipimo data uliishia kuunda pakiti kubwa za mtandao.

Tulishughulikia suala hili kwa kurekebisha visasisho vyote vya usasishaji na usaidizi wa foleni. Ingawa ilichukua muda kidogo, mwishowe ilifaa kuirekebisha badala ya kutegemea udukuzi wa haraka.

Chanzo: mapenzi.com

Kuongeza maoni