Megapack: mar a chaidh aig luchd-leasachaidh Factorio air fuasgladh fhaighinn air an duilgheadas le ioma-chluicheadair airson 200 cluicheadair

Megapack: mar a chaidh aig luchd-leasachaidh Factorio air fuasgladh fhaighinn air an duilgheadas le ioma-chluicheadair airson 200 cluicheadair
Anns a’ Chèitean am-bliadhna ghabh mi pàirt mar chluicheadair ann an Tachartasan MMO KatherineOfSky. Mhothaich mi nuair a ruigeas an àireamh de chluicheadairean àireamh sònraichte, a h-uile beagan mhionaidean bidh cuid dhiubh “a’ tuiteam dheth ”. Gu fortanach dhutsa (ach chan ann dhòmhsa), bha mi air aon de na cluicheadairean sin a dhì-cheangail Gach àm, eadhon le deagh cheangal. Ghabh mi seo mar dhùbhlan pearsanta agus thòisich mi a’ coimhead airson adhbharan na trioblaid. Às deidh trì seachdainean de bhith a’ dèanamh deasbaid, a’ dèanamh deuchainn agus a’ càradh, chaidh am biast a chàradh mu dheireadh, ach cha robh an turas cho furasta sin.

Tha duilgheadasan le geamannan ioma-chluicheadair gu math duilich a lorg. Mar as trice bidh iad a 'tachairt fo pharaimearan lìonra fìor shònraichte agus suidheachaidhean geama sònraichte (anns a' chùis seo, le barrachd air cluicheadairean 200). Agus eadhon nuair a ghabhas an duilgheadas ath-riochdachadh, chan urrainnear a dheasbad gu ceart oir tha cuir a-steach puingean brisidh a’ stad a’ gheama, a’ cur troimh-chèile air timers, agus mar as trice ag adhbhrachadh ùine a-muigh don cheangal. Ach taing dha seasmhachd agus inneal mìorbhaileach ris an canar clobhdach Chaidh agam air faighinn a-mach dè bha a’ dol.

Ann an ùine ghoirid, mar thoradh air bug agus buileachadh neo-choileanta an atharrais stàite latency, bhiodh an neach-dèiligidh uaireannan ga lorg fhèin ann an suidheachadh far am feumadh e pasgan lìonra a chuir a-steach anns an robh gnìomhan taghaidh a’ chluicheadair timcheall air 400 aonad geama ann an aon chearcall cloc ( is e “mega-packet” a chanas sinn ris. Feumaidh an frithealaiche an uairsin chan e a-mhàin na gnìomhan cuir a-steach sin gu lèir fhaighinn gu ceart, ach cuideachd an cur chun a h-uile teachdaiche eile. Ma tha 200 neach-dèiligidh agad, bidh seo na dhuilgheadas gu luath. Bidh an ceangal ris an t-seirbheisiche gu luath a’ fàs clogged, a’ leantainn gu call pacaid agus casgade de phasganan ath-iarraidh. Le bhith a’ cur dàil air a’ ghnìomhachd cuir a-steach bidh eadhon barrachd luchd-dèiligidh a’ cur megapackets, ag adhbhrachadh gum fàs an maoim-sneachda eadhon nas motha. Bidh teachdaichean fortanach a’ faighinn air ais; bidh an fheadhainn eile a’ tuiteam dheth.

Megapack: mar a chaidh aig luchd-leasachaidh Factorio air fuasgladh fhaighinn air an duilgheadas le ioma-chluicheadair airson 200 cluicheadair
Bha an duilgheadas gu math bunaiteach agus thug e 2 sheachdain dhomh a chàradh. Tha e gu math teignigeach, agus mar sin mìnichidh mi am mion-fhiosrachadh teicnigeach juicy gu h-ìosal. Ach an toiseach, feumaidh fios a bhith agad, bhon dreach 0.17.54, a chaidh fhoillseachadh air 4 Ògmhios, a dh ’aindeoin duilgheadasan ceangail sealach, gu bheil ioma-chluicheadair air fàs nas seasmhaiche, agus gu bheil dàil falaich air fàs gu math nas lugha de bhiast (nas lugha de shlaodadh agus teleporting). Tha mi cuideachd air an dòigh anns a bheil lag sabaid falaichte atharrachadh agus tha mi an dòchas gun dèan seo beagan nas socair.

Pasgan mega ioma-chluicheadair - mion-fhiosrachadh teicnigeach

Gus a chuir gu sìmplidh, bidh ioma-chluicheadair ann an geama ag obair mar seo: bidh a h-uile neach-dèiligidh a ’dèanamh atharrais air staid a’ gheama, a ’faighinn agus a’ cur a-steach dìreach cluicheadair (ris an canar “gnìomhan cuir a-steach”, Gnìomhan a-steach). Is e prìomh obair an fhrithealaiche gluasad Gnìomhan a-steach agus smachd gum bi a h-uile neach-dèiligidh a’ coileanadh na h-aon ghnìomhan anns an aon chearcall cloc. Faodaidh tu barrachd a leughadh mu dheidhinn seo sa phost FFF-149.

Leis gum feum am frithealaiche co-dhùnaidhean a dhèanamh mu na gnìomhan a bu chòir a dhèanamh, bidh gnìomhan a’ chluicheadair a’ gluasad timcheall air an t-slighe seo: gnìomh cluicheadair -> teachdaiche geama -> lìonra -> frithealaiche -> lìonra -> teachdaiche geama. Tha seo a’ ciallachadh nach tèid gnìomh gach cluicheadair a dhèanamh ach às deidh turas cruinn thairis air an lìonra. Air sgàth seo, bhiodh coltas gu math slaodach air a’ gheama, agus mar sin cha mhòr sa bhad às deidh ioma-chluicheadair a thoirt a-steach sa gheama, chaidh uidheamachd a thoirt a-steach gus dàil a chuir am falach. Bidh a bhith a’ falach dàil a’ samhlachadh cuir a-steach cluicheadair gun a bhith a’ toirt aire do ghnìomhan chluicheadairean eile agus co-dhùnaidhean an fhrithealaiche.

Megapack: mar a chaidh aig luchd-leasachaidh Factorio air fuasgladh fhaighinn air an duilgheadas le ioma-chluicheadair airson 200 cluicheadair
Tha staid geama aig factorio Stàite geama is e staid iomlan a’ chairt, an cluicheadair, na buidhnean agus a h-uile càil eile. Tha e air a shamhlachadh gu cinnteach anns a h-uile neach-dèiligidh stèidhichte air na gnìomhan a fhuaireadh bhon t-seirbheisiche. Tha staid geama naomh, agus ma thòisicheas e a-riamh eadar-dhealaichte bhon fhrithealaiche no neach-dèiligidh sam bith eile, bidh desync a ’tachairt.

ach a-mhàin Stàite geama tha staid dàil againn Stàite latency. Tha fo-sheata bheag de staid na talmhainn ann. Stàite latency chan eil e naomh agus dìreach a’ riochdachadh dealbh de choltas a’ gheama san àm ri teachd stèidhichte air cuir a-steach cluicheadair Gnìomhan a-steach.

Airson an adhbhair seo, bidh sinn a 'stòradh leth-bhreac den chruth a chaidh a chruthachadh Gnìomhan a-steach anns a’ chiudha dàil.

Megapack: mar a chaidh aig luchd-leasachaidh Factorio air fuasgladh fhaighinn air an duilgheadas le ioma-chluicheadair airson 200 cluicheadair
Is e sin, aig deireadh a 'phròiseis air taobh an neach-dèiligidh tha an dealbh a' coimhead rudeigin mar seo:

  1. Bidh sinn a’ tagradh Gnìomhan a-steach cluicheadairean uile gu Stàite geama an dòigh san deach na gnìomhan cuir a-steach seo fhaighinn bhon fhrithealaiche.
  2. Bidh sinn a’ toirt air falbh a h-uile càil bhon ciudha dàil Gnìomhan a-steach, a tha, a rèir an fhrithealaiche, air a chuir a-steach mu thràth Stàite geama.
  3. Sguab às Stàite latency agus ath-shuidheachadh gus am bi e a’ coimhead dìreach mar a tha e Stàite geama.
  4. Bidh sinn a’ cur an gnìomh a h-uile gnìomh bhon ciudha dàil gu Stàite latency.
  5. Stèidhichte air dàta Stàite geama и Stàite latency Bheir sinn an geama don chluicheadair.

Tha so uile air ath-aithris anns gach tomhas.

Ro dhoirbh? Na gabh fois, chan e seo uile. Gus dìoladh a dhèanamh airson ceanglaichean eadar-lìn neo-earbsach, tha sinn air dà uidheamachd a chruthachadh:

  • Tiogaidean air chall: nuair a cho-dhùineas am frithealaiche sin Gnìomhan a-steach cuirear gu bàs aig buille a' gheam, an sin mur d'fhuair e Gnìomhan a-steach cluicheadair sònraichte (mar eisimpleir, mar thoradh air barrachd dàil), cha bhith e a’ feitheamh, ach bheir e fios don neach-dèiligidh seo “Cha tug mi aire dhut Gnìomhan a-steach, feuchaidh mi ri an cur anns an ath bhàr." Tha seo air a dhèanamh gus nach bi ùrachadh a’ mhapa a’ slaodadh sìos airson a h-uile duine mar thoradh air duilgheadasan le ceangal (no coimpiutair) aon chluicheadair. Is fhiach sin a thoirt fa-near Gnìomhan a-steach chan eil iad air an dearmad, ach dìreach air an cur gu aon taobh.
  • Làn-làthaireachd turas cruinn: Bidh an frithealaiche a’ feuchainn ri tomhas dè an ùine a th’ ann eadar an neach-dèiligidh agus an frithealaiche airson gach neach-dèiligidh. A h-uile 5 diog, bidh e a’ barganachadh latency ùr leis an neach-dèiligidh ma tha sin riatanach (stèidhichte air mar a tha an ceangal air a bhith modhail san àm a dh’ fhalbh), agus a’ meudachadh no a’ lughdachadh latency cuairt cruinn a rèir sin.

Air an ceann fhèin, tha na h-innealan sin gu math sìmplidh, ach nuair a thèid an cleachdadh còmhla (a bhios gu tric a 'tachairt le duilgheadasan ceangail), bidh e doirbh a bhith a' riaghladh loidsig a 'chòd agus le mòran chùisean iomallach. A bharrachd air an sin, nuair a thig na h-innealan sin a-steach, feumaidh an t-seirbheisiche agus an ciudha dàil am fear sònraichte a chuir an gnìomh gu ceart Gnìomh Inntrigidh fon ainm StopMovementInTheAir adhartTick. Taing dha seo, ma tha duilgheadasan ann leis a 'cheangal, cha bhith an caractar a' ruith leis fhèin (mar eisimpleir, air beulaibh trèana).

A-nis feumaidh sinn mìneachadh dhut mar a tha taghadh eintiteas ag obair. Aon de na seòrsaichean tar-chuir Gnìomh Inntrigidh tha e na atharrachadh ann an staid taghaidh eintiteas. Tha e ag innse don h-uile duine dè an eintiteas a tha an cluicheadair a’ dol thairis. Mar a shaoileadh tu, is e seo aon de na gnìomhan cuir a-steach as cumanta a chuir teachdaichean a-steach, mar sin gus leud-bann a shàbhaladh, tha sinn air a bharrrachadh gus cho beag de dh’ àite a ghabhail. Is e an dòigh anns a bheil e ag obair, leis gu bheil gach eintiteas air a thaghadh, an àite a bhith a’ stòradh co-chomharran mapa iomlan, àrd-chruinneas, gu bheil an geama a’ stòradh coimeas coimeasach ìosal bhon taghadh roimhe. Tha seo ag obair gu math oir tha taghadh luchagan buailteach a bhith gu math faisg air an taghadh roimhe. Tha seo a’ togail dà riatanas cudromach: Gnìomhan a-steach Cha bu chòir an toirt seachad gu bràth agus feumaidh iad a bhith air an lìonadh san òrdugh cheart. Tha na riatanasan sin air an coinneachadh airson Stàite geama. Ach bhon obair Staid latency ann an "coimhead math gu leòr" airson a 'chluicheadair, chan eil iad riaraichte leis an dàil staid. Stàite latency chan eil e a 'toirt aire iomadh cùis iomall, co-cheangailte ri bhith a’ leum chuairtean gleoc agus ag atharrachadh dàil tar-chuir cuairt cruinn.

Faodaidh tu mu thràth tomhas càite a bheil seo a’ dol. Tha sinn mu dheireadh a’ tòiseachadh a ’faicinn na h-adhbharan airson duilgheadas megapack. Is e freumh na trioblaid gu bheil an loidsig taghadh eintiteas an urra Stàite latency, agus chan eil am fiosrachadh ceart anns an stàit seo an-còmhnaidh. Mar sin, thèid megapacket a chruthachadh mar seo:

  1. Tha duilgheadasan ceangail aig a’ chluicheadair.
  2. Bidh uidheamachdan airson a bhith a’ leum air cearcallan gleoc agus a’ riaghladh an dàil ann an sgaoileadh cuairt cruinn a’ tighinn a-steach.
  3. Chan eil ciudha na stàite dàil a’ toirt aire do na h-innealan sin. Tha seo ag adhbhrachadh gun tèid cuid de ghnìomhan a thoirt air falbh ro-luath no a dhèanamh san òrdugh cheàrr, a 'ciallachadh gu bheil iad ceàrr Stàite latency.
  4. Tha duilgheadas ceangail aig a’ chluicheadair agus, gus grèim fhaighinn air an t-seirbheisiche, atharrais suas ri 400 cearcall.
  5. Aig gach diog, thèid gnìomh ùr, ag atharrachadh taghadh an eintiteas, a chruthachadh agus ullachadh airson a chuir chun t-seirbheisiche.
  6. Bidh an neach-dèiligidh a ’cur mega-batch de 400+ atharrachaidhean taghaidh eintiteas chun t-seirbheisiche (agus le gnìomhan eile: stàitean losgaidh, stàitean coiseachd, msaa cuideachd a’ fulang leis an duilgheadas seo).
  7. Bidh am frithealaiche a’ faighinn 400 gnìomh cuir a-steach. Leis nach eil e ceadaichte gnìomhan cuir a-steach sam bith a sheachnadh, bidh e ag òrdachadh a h-uile neach-dèiligidh na gnìomhan sin a choileanadh agus gan cur thairis air an lìonra.

Is e an ìoranas gun do chruthaich inneal a chaidh a dhealbhadh gus leud-bann a shàbhaladh gu bhith a’ cruthachadh pacaidean lìonra mòr.

Thug sinn aghaidh air a’ chùis seo le bhith a’ càradh a h-uile cùis ùrachaidh agus cùl-taic ciudha. Ged a thug e beagan ùine, aig a’ cheann thall b’ fhiach e a dhèanamh ceart seach a bhith an urra ri hacks sgiobalta.

Source: www.habr.com

Cuir beachd ann