Megapack: Чӣ тавр Factorio мушкилоти 200-плеери мултипликаторро ҳал кард

Megapack: Чӣ тавр Factorio мушкилоти 200-плеери мултипликаторро ҳал кард
Моҳи майи соли ҷорӣ ман ҳамчун бозигар дар он ширкат кардам Чорабиниҳои MMO KatherineOfSky. Ман мушоҳида кардам, ки вақте шумораи бозигарон ба шумораи муайян мерасад, ҳар чанд дақиқа баъзеи онҳо «афтида» мешаванд. Хушбахтона барои шумо (вале на барои ман), ман яке аз он бозигарон будам ҳар дафъаҳатто бо пайвасти хуб. Ман инро ҳамчун як даъвати шахсӣ қабул кардам ва ба ҷустуҷӯи сабабҳои мушкилот шурӯъ кардам. Пас аз се ҳафтаи ислоҳ, озмоиш ва ислоҳ, хато ниҳоят ислоҳ карда мешавад, аммо сафар он қадар осон набуд.

Мушкилот дар бозиҳои мултипликатори пайгирӣ хеле душвор аст. Онҳо одатан дар зери параметрҳои хеле мушаххаси шабака ва дар ҳолати хеле мушаххаси бозӣ рух медиҳанд (дар ин ҳолат, зиёда аз 200 бозигар). Ва ҳатто вақте ки мушкилотро дубора тавлид кардан мумкин аст, онро дуруст ислоҳ кардан мумкин нест, зеро ворид кардани нуқтаҳои танаффус бозиро бозмедорад, таймерҳоро вайрон мекунад ва одатан пайвастшавиро бо сабаби ба охир расидани вақт қатъ мекунад. Аммо ба шарофати суботкорӣ ва як воситаи олиҷаноб даъват пӯшида Ман тавонистам бифаҳмам, ки чӣ рӯй дода истодааст.

Хулоса, аз сабаби хатогӣ ва нопурра иҷро нашудани симулятсияи ҳолати таъхир, муштарӣ баъзан ба вазъияте дучор мешуд, ки бояд бастаи шабакавиро дар як давраи соат фиристад, ки аз амалҳои вуруди плеер барои интихоби тақрибан 400 объекти бозӣ иборат буд ( мо онро "мегапакет" меномем). Баъд аз ин, сервер на танҳо бояд ҳамаи ин амалҳои воридшударо дуруст қабул кунад, балки онҳоро ба ҳамаи муштариёни дигар фиристад. Агар шумо 200 муштарӣ дошта бошед, ин зуд ба мушкилот табдил меёбад. Канали сервер ба зудӣ баста мешавад, ки дар натиҷа бастаҳои гумшуда ва як қатор бастаҳои аз нав дархостшуда мешаванд. Ба таъхир гузоштани амалҳои воридотӣ боиси он мегардад, ки муштариёни бештар ба фиристодани мегапакетҳо шурӯъ кунанд ва тармаашон боз ҳам қавитар мешавад. Мизоҷони муваффақ тавонистаанд барқарор шаванд, ҳама боқимонда меафтанд.

Megapack: Чӣ тавр Factorio мушкилоти 200-плеери мултипликаторро ҳал кард
Мушкилот хеле асосӣ буд ва барои ислоҳи он ман 2 ҳафта лозим шуд. Ин хеле техникӣ аст, бинобар ин ман тафсилоти техникии боллазату шањдбори дар зер шарҳ медиҳам. Аммо аввал, шумо бояд донед, ки аз замони версияи 0.17.54, ки 4 июн нашр шуд, дар баробари мушкилоти муваққатии пайвастшавӣ, мултипликатор устувортар шудааст ва пинҳон кардани таъхир хеле кам хато мекунад (камтар тормоз ва телепортатсия). Инчунин, ман тарзи пинҳон кардани таъхирҳои ҷангро тағир додам ва умедворам, ки ин онҳоро каме ҳамвортар мекунад.

Multiplayer Mega Pack - Тафсилоти техникӣ

Оддӣ карда гӯем, мултипликатори бозӣ чунин кор мекунад: ҳама муштариён бо қабул ва фиристодани танҳо вуруди плеер (бо номи "амалҳои воридотӣ") ҳолати бозиро тақлид мекунанд. Амалҳои воридотӣ). Вазифаи асосии сервер интиқол додан аст Амалҳои воридотӣ ва кафолат додани он, ки ҳамаи муштариён дар як давра амалҳои якхеларо иҷро мекунанд. Шумо метавонед дар ин бора бештар дар мақола бихонед. FFF-149.

Азбаски сервер бояд дар бораи кадом амалҳо қарор қабул кунад, амалҳои плеер бо роҳи зерин ҳаракат мекунанд: амали плеер -> муштарии бозӣ -> шабака -> сервер -> шабака -> муштарии бозӣ. Ин маънои онро дорад, ки ҳар як амали плеер танҳо пас аз он анҷом дода мешавад, ки роҳи гардишгарро тавассути шабака анҷом дод. Аз ин сабаб, бозӣ хеле суст ба назар мерасид, бинобар ин қариб дарҳол пас аз пайдоиши мултипликатор дар бозӣ, механизми пинҳон кардани таъхирҳо ҷорӣ карда шуд. Пинҳон кардани таъхир вуруди бозигарро бидуни ба назар гирифтани амали бозигарони дигар ва қабули қарорҳои сервер тақлид мекунад.

Megapack: Чӣ тавр Factorio мушкилоти 200-плеери мултипликаторро ҳал кард
Factorio ҳолати бозӣ дорад ҳолати бозӣ ҳолати пурраи харита, бозигар, объектҳо ва ҳама чизи дигар аст. Он дар ҳама муштариён дар асоси амалҳои аз сервер гирифташуда ба таври муайян тақлид карда мешавад. Ҳолати бозӣ муқаддас аст ва агар он боре аз сервер ё ягон муштарии дигар фарқ кунад, пас синхронизатсия рух медиҳад.

ба истиснои ҳолати бозӣ мо долати кашолкорй дорем Ҳолати таъхир. Он дорои як қисми хурди ҳолати асосӣ мебошад. Ҳолати таъхир муқаддас нест ва танҳо тасвири он аст, ки ҳолати бозӣ дар оянда дар асоси вуруди плеер чӣ гуна хоҳад буд Амалҳои воридотӣ.

Барои ин, мо нусхаи тавлидшударо нигоҳ медорем Амалҳои воридотӣ дар навбати таъхир.

Megapack: Чӣ тавр Factorio мушкилоти 200-плеери мултипликаторро ҳал кард
Яъне, дар охири раванд дар тарафи муштарӣ расм чунин менамояд:

  1. Муроҷиат кунед Амалҳои воридотӣ ҳама бозигарон ба ҳолати бозӣ тарзи қабули ин амалҳои воридотӣ аз сервер.
  2. Ҳама чизро аз навбати таъхир хориҷ кунед Амалҳои воридотӣ, ки ба гуфтаи сервер, аллакай ба онҳо муроҷиат кардаанд ҳолати бозӣ.
  3. Нест кардан Ҳолати таъхир ва онро аз нав танзим кунед, то он маҳз ҳамон тавре ба назар мерасад ҳолати бозӣ.
  4. Ҳама амалҳоро аз навбати таъхир то Ҳолати таъхир.
  5. Дар асоси маълумот ҳолати бозӣ и Ҳолати таъхир бозиро ба плеер расонед.

Хамаи ин дар хар лахза такрор мешавад.

Хеле душвор? Ором нашавед, ин ҳама нест. Барои ҷуброн кардани пайвастҳои беэътимоди интернет, мо ду механизмро таъсис додем:

  • Тикҳои партофташуда: вақте ки сервер қарор қабул мекунад Амалҳои воридотӣ дар такти бозй ичро карда мешавад, пас агар нагирифта бошад Амалҳои воридотӣ баъзе бозигарон (масалан, аз сабаби зиёд шудани таъхир), ӯ интизор намешавад, аммо ба ин муштарӣ хабар медиҳад: "Ман шуморо ба назар нагирифтам. Амалҳои воридотӣ, Ман кӯшиш мекунам, ки онҳоро дар сатри навбатӣ илова кунам. Ин барои он анҷом дода мешавад, ки аз сабаби мушкилот бо пайвастшавӣ (ё бо компютер) як плеер, навсозии харита барои ҳама дигарон суст нашавад. Бояд гуфт, ки Амалҳои воридотӣ ба эътибор нагирифтаанд, балки ба таъхир андохта мешаванд.
  • Таъхири пурраи гардиш: Сервер мекӯшад тахмин кунад, ки таъхири рафту омад байни муштарӣ ва сервер барои ҳар як муштарӣ чӣ гуна аст. Ҳар 5 сония, он ҳангоми зарурат бо муштарӣ дар бораи таъхири нав гуфтушунид мекунад (вобаста ба он, ки пайвастшавӣ дар гузашта чӣ гуна рафтор кардааст) ва мутаносибан таъхири гардишро зиёд ё кам мекунад.

Худ аз худ, ин механизмҳо хеле соддаанд, аммо вақте ки онҳо якҷоя истифода мешаванд (ки аксар вақт бо мушкилоти пайвастшавӣ рух медиҳад), идора кардани мантиқи код ва бо бисёр ҳолатҳои канорӣ душвор мешавад. Илова бар ин, вақте ки ин механизмҳо ба бозӣ меоянд, сервер ва навбати таъхир бояд дуруст амалӣ махсус Амали вуруд дар зери ном Ҳаракатро дар TheNextTick қатъ кунед. Ба шарофати ин, дар сурати мушкилоти пайвастшавӣ, персонаж худ аз худ намеравад (масалан, дар зери қатор).

Ҳоло ман бояд ба шумо фаҳмонам, ки интихоби объект чӣ гуна кор мекунад. Яке аз навъҳои гузашта Амали вуруд тағирот дар ҳолати интихоби объект аст. Он ба ҳама нақл мекунад, ки плеер бо муш ба болои кадом объект гузашт. Тавре ки шумо мебинед, ин яке аз амалҳои маъмултарини вуруди аз ҷониби муштариён фиристодашуда мебошад, аз ин рӯ барои сарфаи фарохмаҷро, мо онро оптимизатсия кардем, то ки он ҳарчи камтар ҷойро ишғол кунад. Ин ба таври зерин амалӣ карда мешавад: вақте ки ҳар як объект интихоб карда мешавад, ба ҷои нигоҳ доштани координатҳои харитаи мутлақ ва дақиқ, бозӣ ҷуброни нисбии пасти дақиқро аз интихоби қаблӣ нигоҳ медорад. Ин хуб кор мекунад, зеро интихоби муш одатан ба интихоби қаблӣ хеле наздик мешавад. Ин ду талаботи муҳимро ба миён меорад: Амалҳои воридотӣ набояд ҳеҷ гоҳ гузаред ва бояд бо тартиби дуруст анҷом дода шавад. Ин талабот барои ҳолати бозӣ. Аммо аз рун вазифа ҳолати таъхир дар "назар ба кофӣ хуб" барои плеери, онҳо дар ҳолати таъхир қаноатманд нестанд. Ҳолати таъхир ба назар намегирад бисёр ҳолатҳои сарҳадӣки бо гузариш ба соатҳо ва тағир додани таъхирҳои интиқоли даврӣ алоқаманданд.

Шумо аллакай метавонед тахмин кунед, ки ин ба куҷо меравад. Ниҳоят, мо ба дидани сабабҳои мушкилоти мегапакет шурӯъ мекунем. Решаи мушкилот дар он аст, ки мантиқи интихоби объект ба он такя мекунад Ҳолати таъхир, ва ин ҳолат на ҳамеша маълумоти дурустро дар бар мегирад. Ҳамин тавр, мегапакет чунин тавлид мешавад:

  1. Плеер бо мушкилоти пайвастшавӣ дучор мешавад.
  2. Механизмҳои гузариш аз давраҳо ва танзими таъхири интиқоли даврӣ ба кор медароянд.
  3. Навбати ҳолати таъхир ин механизмҳоро ҳисоб намекунад. Ин боиси он мегардад, ки баъзе амалҳо пеш аз мӯҳлат хориҷ карда шаванд ё бо тартиби нодуруст иҷро карда шаванд, ки дар натиҷа нодуруст Ҳолати таъхир.
  4. Плеер мушкили пайвастшавӣ надорад ва то 400 давраро барои расидан ба сервер тақлид мекунад.
  5. Дар ҳар як давра амали нав тавлид мешавад ва барои фиристодан ба сервер омода мешавад, ки интихоби объектро тағир медиҳад.
  6. Мизоҷ як мегапакети 400+ тағйироти интихоби объектро ба сервер мефиристад (ва бо дигар амалҳо: ҳолати оташфишонӣ, ҳолати роҳ ва ғайра низ аз ин мушкилот зарар дидаанд).
  7. Сервер 400 амали вурудро қабул мекунад. Азбаски ба гузариш ба як амали воридот иҷозат дода намешавад, он ба ҳамаи муштариён дастур медиҳад, ки ин амалҳоро иҷро кунанд ва онҳоро тавассути шабака ирсол кунанд.

Тааҷҷубовар дар он аст, ки механизме, ки барои нигоҳ доштани фарохмаҷро тарҳрезӣ шудааст, ба бастаҳои бузурги шабака оварда расонд.

Мо ин масъаларо тавассути ислоҳи ҳама ҳолатҳои канори навсозӣ ва дастгирии таъхири навбат ҳал кардем. Гарчанде ки ин хеле вақт лозим буд, ба ҷои он ки ба ҳакҳои зуд такя кардан лозим буд, дар ниҳоят онро дуруст ба даст овард.

Манбаъ: will.com

Илова Эзоҳ