{"id":37812,"date":"2019-10-31T22:19:55","date_gmt":"2019-10-31T19:19:55","guid":{"rendered":"https:\/\/prohoster.info\/blog\/megapaket-kak-razrabotchikam-factorio-udalos-reshit-problemu-s-multipleerom-na-200-igrokov\/"},"modified":"2019-10-31T22:19:55","modified_gmt":"2019-10-31T19:19:55","slug":"megapaket-kak-razrabotchikam-factorio-udalos-reshit-problemu-s-multipleerom-na-200-igrokov","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/megapaket-kak-razrabotchikam-factorio-udalos-reshit-problemu-s-multipleerom-na-200-igrokov","title":{"rendered":"Mega paketi: si arrit\u00ebn zhvilluesit e Factorio t\u00eb zgjidhnin problemin me multiplayer p\u00ebr 200 lojtar\u00eb","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Mega paketi: si arrit\u00ebn zhvilluesit e Factorio t\u00eb zgjidhnin problemin me multiplayer p\u00ebr 200 lojtar\u00eb\" src=\"\/wp-content\/uploads\/2019\/09\/135544365299791de479555734645ef2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nN\u00eb maj t\u00eb k\u00ebtij viti, mora pjes\u00eb si lojtar n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/d_DlvkTK9hU\">ngjarjen MMO KatherineOfSky<\/a><\/noindex>. Vura re se kur numri i lojtar\u00ebve arrin nj\u00eb num\u00ebr t\u00eb caktuar, \u00e7do disa minuta nj\u00eb pjes\u00eb e tyre \"d\u00ebshp\u00ebron\". Fatmir\u00ebsisht p\u00ebr ju (por jo p\u00ebr mua), un\u00eb isha nj\u00eb nga ata lojtar\u00eb q\u00eb \u00e7aktivizoheshin <b>\u00e7do her\u00eb<\/b>, edhe me nj\u00eb lidhje t\u00eb mir\u00eb. E pranova k\u00ebt\u00eb si nj\u00eb sfid\u00eb personale dhe fillova t\u00eb k\u00ebrkoj shkakun e problemit. Pas tri jav\u00ebsh debugging, testimi dhe rregullimi, gabimi u zgjidh n\u00eb fund, por ky udh\u00ebtim nuk ishte aq i leht\u00eb sa duket.<\/p>\n<p>Problemet e loj\u00ebrave shum\u00ebloj\u00ebshe jan\u00eb shum\u00eb t\u00eb v\u00ebshtira p\u00ebr t'u gjurmuar. Ato zakonisht ndodhin n\u00eb kushte shum\u00eb specifike t\u00eb parametrave t\u00eb rrjetit dhe n\u00eb situata shum\u00eb specifike t\u00eb loj\u00ebs (n\u00eb k\u00ebt\u00eb rast \u2013 me m\u00eb shum\u00eb se 200 lojtar\u00eb). Dhe edhe kur arrin t\u00eb riprodhosh problemin, \u00ebsht\u00eb e pamundur ta debugosh si\u00e7 duhet, sepse vendosja e pikave t\u00eb kontrollit ndalon loj\u00ebn, ngat\u00ebrron kronomet\u00ebrat dhe zakonisht \u00e7on n\u00eb mbylljen e lidhjes p\u00ebr shkak t\u00eb tejkalimit t\u00eb afatit. Por fal\u00eb k\u00ebmb\u00ebnguljes sime dhe nj\u00eb instrumenti t\u00eb mrekulluesh\u00ebm t\u00eb quajtur <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jagt\/clumsy\">clumsy<\/a><\/noindex> , arrita t\u00eb kuptoj se \u00e7far\u00eb po ndodhte.<\/p>\n<p>N\u00ebse e p\u00ebrmbledh: p\u00ebr shkak t\u00eb nj\u00eb gabimi dhe implementimi t\u00eb pap\u00ebrfunduar t\u00eb simulimit t\u00eb gjendjes s\u00eb vones\u00ebs, klienti ndonj\u00ebher\u00eb ndodhej n\u00eb nj\u00eb situat\u00eb ku duhej t\u00eb d\u00ebrgonte nj\u00eb paket\u00eb rrjeti, e cila p\u00ebrmbante veprimet e lojtarit p\u00ebr rreth 400 entitete loj\u00ebrore (ne e quajm\u00eb \"megapak\u00eb\"). Pas k\u00ebsaj, serveri duhet jo vet\u00ebm t\u00eb marr\u00eb sakt\u00ebsisht t\u00eb gjitha k\u00ebto veprime hyr\u00ebse, por gjithashtu t'i d\u00ebrgoj\u00eb ato t\u00eb tjer\u00ebve klient\u00eb. N\u00ebse ke 200 klient\u00eb, kjo shpejt b\u00ebhet nj\u00eb problem. Kanali n\u00eb server shpejt mbushet, \u00e7on n\u00eb humbje paketash dhe nj\u00eb seri paketash t\u00eb k\u00ebrkuara p\u00ebrs\u00ebri. Vonesa n\u00eb veprimet hyr\u00ebse pastaj b\u00ebn q\u00eb akoma m\u00eb shum\u00eb klient\u00eb t\u00eb fillojn\u00eb t\u00eb d\u00ebrgojn\u00eb megapak\u00eb, dhe p\u00ebrmbytja e tyre b\u00ebhet edhe m\u00eb e fort\u00eb. Klient\u00ebt me fat arrijn\u00eb t\u00eb rikuperohen, t\u00eb gjith\u00eb t\u00eb tjer\u00ebt \"d\u00ebshprohen\".<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<img decoding=\"async\" alt=\"Mega paketi: si arrit\u00ebn zhvilluesit e Factorio t\u00eb zgjidhnin problemin me multiplayer p\u00ebr 200 lojtar\u00eb\" src=\"\/wp-content\/uploads\/2019\/09\/ff1a60d55eb6f5a4dc7be4b826d747f0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nProblemi ishte mjaft themelor, dhe m\u00eb mori 2 jav\u00eb p\u00ebr ta zgjidhur. Ai \u00ebsht\u00eb mjaft teknik, prandaj m\u00eb posht\u00eb do t\u00eb shpjegoj detajet e mrekullueshme teknike. Por p\u00ebrpara, duhet t\u00eb dini se nga versioni 0.17.54, i l\u00ebshuar m\u00eb 4 qershor, n\u00ebn kushte t\u00eb p\u00ebrkohshme problemesh me lidhjen, shum\u00ebloj\u00ebsia u b\u00eb m\u00eb e q\u00ebndrueshme dhe fshehja e vonesave u b\u00eb shum\u00eb m\u00eb pak e p\u00ebrs\u00ebritur (m\u00eb pak ndalesa dhe teletransportime). P\u00ebr m\u00eb tep\u00ebr, kam ndryshuar m\u00ebnyr\u00ebn e fshehjes s\u00eb vonesave n\u00eb betej\u00eb dhe shpresoj q\u00eb p\u00ebr k\u00ebt\u00eb do t\u00eb jen\u00eb pak m\u00eb t\u00eb qet\u00eb.<\/p>\n<h3>Megapak\u00eb shum\u00ebloj\u00ebshe \u2013 detajet teknike<\/h3>\n<p>\nP\u00ebr ta shpjeguar thjesht\u00eb, shum\u00ebloj\u00ebsia n\u00eb loj\u00eb funksionon n\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb: t\u00eb gjith\u00eb klient\u00ebt simulojn\u00eb gjendjen e loj\u00ebs, duke marr\u00eb dhe d\u00ebrguar vet\u00ebm hyrjet e lojtar\u00ebve (t\u00eb quajtura \"veprime hyr\u00ebse\", <i>Input Actions<\/i>). Detyra kryesore e serverit \u00ebsht\u00eb t\u00eb transmetoj\u00eb <i>Input Actions<\/i> dhe t\u00eb kontrolloj\u00eb q\u00eb t\u00eb gjitha klient\u00ebt t\u00eb kryejn\u00eb t\u00eb nj\u00ebjtat veprime n\u00eb nj\u00eb cic\u00ebrim\u00eb. M\u00eb shum\u00eb rreth k\u00ebsaj mund t\u00eb lexoni n\u00eb postimin <noindex><a rel=\"nofollow\" href=\"https:\/\/www.factorio.com\/blog\/post\/fff-149\">FFF-149<\/a><\/noindex>.<\/p>\n<p>Sepse serveri duhet t\u00eb marr\u00eb vendime p\u00ebr at\u00eb q\u00eb duhet t\u00eb b\u00ebj\u00eb, veprimi i lojtarit l\u00ebviz m\u00eb shum\u00eb ose m\u00eb pak n\u00eb k\u00ebt\u00eb rrug\u00eb: veprimi i lojtarit -&gt; klienti i loj\u00ebs -&gt; rrjeti -&gt; serveri -&gt; rrjeti -&gt; klienti i loj\u00ebs. Kjo do t\u00eb thot\u00eb se \u00e7do veprim i lojtarit ekzekutohet vet\u00ebm pasi t\u00eb kaloj\u00eb rrug\u00ebn p\u00ebr t\u00eb dhe mbrapa p\u00ebrmes rrjetit. P\u00ebr shkak t\u00eb k\u00ebsaj, loja do t\u00eb dukej jasht\u00ebzakonisht e ngadalte, prandaj pothuajse menj\u00ebher\u00eb pas shfaqjes s\u00eb shum\u00ebloj\u00ebsis\u00eb n\u00eb loj\u00eb u prezantua nj\u00eb mekaniz\u00ebm p\u00ebr fshehjen e vonesave. Fshehja e vonesave imiton veprimet e lojtarit pa marr\u00eb parasysh veprimet e lojtar\u00ebve t\u00eb tjer\u00eb dhe vendimet e serverit.<\/p>\n<p><img decoding=\"async\" alt=\"Mega paketi: si arrit\u00ebn zhvilluesit e Factorio t\u00eb zgjidhnin problemin me multiplayer p\u00ebr 200 lojtar\u00eb\" src=\"\/wp-content\/uploads\/2019\/09\/0b66a3b07d6aa2ab1d2329d782c78615.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nN\u00eb Factorio ekziston nj\u00eb gjendje e loj\u00ebs <i>Game State<\/i> \u2014 kjo \u00ebsht\u00eb gjendja e plot\u00eb e hart\u00ebs, lojtarit, entiteteve dhe gjith\u00e7kaje tjet\u00ebr. Ajo simulohet n\u00eb m\u00ebnyr\u00eb determinuese n\u00eb t\u00eb gjith\u00eb klient\u00ebt bazuar n\u00eb veprimet e marra nga serveri. Gjendja e loj\u00ebs \u00ebsht\u00eb e shenjt\u00eb dhe n\u00ebse ndonj\u00ebher\u00eb fillon t\u00eb ndryshoj\u00eb nga serveri ose \u00e7do klient tjet\u00ebr, at\u00ebher\u00eb ndodh nj\u00eb desinkronizim.<\/p>\n<p>P\u00ebrve\u00e7 <i>Game State<\/i> kemi nj\u00eb gjendje vonese <i>Latency State<\/i>. Ajo p\u00ebrmban nj\u00eb n\u00ebngrup t\u00eb vog\u00ebl t\u00eb gjendjes kryesore. <i>Latency State<\/i> ajo nuk \u00ebsht\u00eb e shenjt\u00eb dhe thjesht paraqet nj\u00eb pamje t\u00eb asaj se si do t\u00eb dukej gjendja e loj\u00ebs n\u00eb t\u00eb ardhmen bazuar n\u00eb hyresat e lojtar\u00ebve <i>Input Actions<\/i>.<\/p>\n<p>P\u00ebr k\u00ebt\u00eb, ne ruajm\u00eb nj\u00eb kopje t\u00eb krijuar <i>Input Actions<\/i> n\u00eb radh\u00eb t\u00eb vonesave.<\/p>\n<p><img decoding=\"async\" alt=\"Mega paketi: si arrit\u00ebn zhvilluesit e Factorio t\u00eb zgjidhnin problemin me multiplayer p\u00ebr 200 lojtar\u00eb\" src=\"\/wp-content\/uploads\/2019\/09\/31e43263d1d2bfc79700730978fcd02a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPra, n\u00eb fund t\u00eb procesit n\u00eb an\u00ebn e klientit pamja duket m\u00eb shum\u00eb ose m\u00eb pak k\u00ebshtu:<\/p>\n<ol>\n<li>Aplikojm\u00eb <i>Input Actions<\/i> t\u00eb gjith\u00eb lojtar\u00ebt <i>Game State<\/i> ashtu si\u00e7 jan\u00eb marr\u00eb k\u00ebto veprime hyr\u00ebse nga serveri.<\/li>\n<li>Fshijm\u00eb nga radh\u00eb t\u00eb vonesave t\u00eb gjitha <i>Input Actions<\/i>, q\u00eb sipas t\u00eb dh\u00ebnave t\u00eb serverit, tashm\u00eb kan\u00eb qen\u00eb aplikuar n\u00eb <i>Game State<\/i>.<\/li>\n<li>Fshijm\u00eb <i>Latency State<\/i> dhe e rivendosim q\u00eb t\u00eb duket sakt\u00ebsisht si <i>Game State<\/i>.<\/li>\n<li>Aplikojm\u00eb t\u00eb gjitha veprimet nga radh\u00ebt e vones\u00ebs n\u00eb <i>Latency State<\/i>.<\/li>\n<li>Bazuar n\u00eb t\u00eb dh\u00ebnat <i>Game State<\/i> dhe <i>Latency State<\/i> ne rendisim loj\u00ebn p\u00ebr lojtarin.<\/li>\n<\/ol>\n<p>\nKjo p\u00ebrs\u00ebritet n\u00eb \u00e7do takt.<\/p>\n<p>P\u00ebr shum\u00eb t\u00eb komplikuar? Mos u shqet\u00ebsoni, kjo nuk \u00ebsht\u00eb e gjitha. P\u00ebr t\u00eb kompensuar pasigurin\u00eb e lidhjeve t\u00eb Internetit, ne krijuam dy mekanizma:<\/p>\n<ul>\n<li>Taktet e humbura: kur serveri vendos se <i>Input Actions<\/i> do t\u00eb realizohen n\u00eb taktin e loj\u00ebs, dhe n\u00ebse ai nuk ka re\u00e7ipuar <i>Input Actions<\/i> nj\u00eb lojtar (p.sh., p\u00ebr shkak t\u00eb rritjes s\u00eb vones\u00ebs), ai nuk do t\u00eb pres\u00eb, por do ta informoj\u00eb at\u00eb klient me \"nuk e kam marr\u00eb parasysh\",\n do t\u00eb p\u00ebrpiqem t'i shtoj ato n\u00eb taktin e ardhsh\u00ebm.\" Kjo \u00ebsht\u00eb b\u00ebr\u00eb p\u00ebr t\u00eb siguruar q\u00eb,\n p\u00ebr shkak t\u00eb problemeve me koneksionin (ose me kompjuterin) t\u00eb nj\u00eb lojtarit, azhurnimi i hart\u00ebs t\u00eb mos ngadal\u00ebsohet p\u00ebr t\u00eb gjith\u00eb t\u00eb tjer\u00ebt. Duhet t\u00eb theksohet se <i>Input Actions<\/i>ato nuk injorohen, por thjesht shtyhen. <i>Input Actions<\/i> Vonesa e rrug\u00ebs p\u00ebrfundimtare p\u00ebr vajtje-ardhje: serveri p\u00ebrpiqet t\u00eb parashikoj\u00eb se cila \u00ebsht\u00eb vonesa n\u00eb transferimin e t\u00eb dh\u00ebnave p\u00ebr vajtje-ardhje midis klientit dhe serverit p\u00ebr \u00e7do klient. \u00c7do 5 sekonda, ai k\u00ebshtu diskuton me klientin nj\u00eb vones\u00eb t\u00eb re (n\u00eb var\u00ebsi t\u00eb m\u00ebnyr\u00ebs se si ishte koneksioni n\u00eb t\u00eb kaluar\u00ebn), dhe p\u00ebr k\u00ebt\u00eb arsye rrit ose ul vones\u00ebn e transferimit t\u00eb t\u00eb dh\u00ebnave p\u00ebr vajtje-ardhje.<\/li>\n<li>K\u00ebta mekanizma n\u00eb vetvete jan\u00eb t\u00eb thjesht\u00eb, por kur p\u00ebrdoren s\u00eb bashku (\u00e7ka ndodh shpesh n\u00eb rast t\u00eb problemeve me koneksionin), logjika e kodit b\u00ebhet e v\u00ebshtir\u00eb t\u00eb menaxhohet dhe ka shum\u00eb raste kufitar. P\u00ebr m\u00eb tep\u00ebr, kur k\u00ebta mekanizma jan\u00eb n\u00eb loj\u00eb, serveri dhe radh\u00ebt e vonesave duhet t\u00eb implementojn\u00eb sakt\u00eb nj\u00eb t\u00eb ve\u00e7ant\u00eb<\/li>\n<\/ul>\n<p>\nInput Action <i>StopMovementInTheNextTick<\/i> t\u00eb quajtur <i>. Fal\u00eb k\u00ebsaj, n\u00eb rast t\u00eb problemeve me koneksionin, personazhi nuk do t\u00eb vrapoj\u00eb vet\u00eb (p.sh., n\u00ebn tren).<\/i>Tani duhet t'ju shpjegoj se si funksionon zgjedhja e entiteteve. Nj\u00eb nga llojet e transmetuara<\/p>\n<p>\u00ebsht\u00eb ndryshimi i gjendjes s\u00eb zgjedhjes s\u00eb entitetit. Ky ndryshim informon t\u00eb gjith\u00eb se mbi cilin entitet lojtarin e ka kuror\u00ebsuar miu. Si\u00e7 mund t\u00eb kuptohet, kjo \u00ebsht\u00eb nj\u00eb nga veprimet m\u00eb t\u00eb zakonshme t\u00eb inputeve t\u00eb d\u00ebrguara nga klient\u00ebt, prandaj p\u00ebr t\u00eb kursyer kapacitetin e kanalit, ne e kemi optimizuar at\u00eb p\u00ebr t\u00eb z\u00ebn\u00eb sa m\u00eb pak hap\u00ebsir\u00eb. Kjo \u00ebsht\u00eb realizuar n\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb: duke zgjedhur \u00e7do entitet, n\u00eb vend q\u00eb t\u00eb ruajm\u00eb koordinatat e sakta absolute t\u00eb hart\u00ebs, loja ruan nj\u00eb zhvendosje relative t\u00eb sakt\u00eb t\u00eb ul\u00ebt nga zgjedhja e m\u00ebparshme. Kjo funksionon mir\u00eb, sepse n\u00eb shumic\u00ebn e rasteve zgjedhja b\u00ebhet shum\u00eb af\u00ebr zgjedhjes s\u00eb m\u00ebparshme. P\u00ebr shkak t\u00eb k\u00ebsaj, do t\u00eb lindin dy k\u00ebrkesa t\u00eb r\u00ebnd\u00ebsishme: <i>StopMovementInTheNextTick<\/i> asnj\u00ebher\u00eb nuk duhet t\u00eb humbasin dhe duhet t\u00eb kryhen n\u00eb rendin e duhur. K\u00ebto k\u00ebrkesa p\u00ebrmbushen p\u00ebr <i>Input Actions<\/i> . Por, meqen\u00ebse detyra <i>Game State<\/i>Latency state <i>\u00ebsht\u00eb \"t\u00eb duket mjaft e mir\u00eb\" p\u00ebr lojtarin, n\u00ebn gjendjen e vonesave ato nuk p\u00ebrmbushen.<\/i> nuk merr parasysh <i>Latency State<\/i> shum\u00eb raste kufitare <noindex><a rel=\"nofollow\" href=\"https:\/\/cdn.factorio.com\/assets\/img\/blog\/fff-302-megapacket-commit.jpg\">, t\u00eb lidhura me humbjen e takt\u00ebve dhe ndryshimin e vonesave t\u00eb transferimit p\u00ebr vajtje-ardhje.<\/a><\/noindex>Tani mund t\u00eb keni marr\u00eb vesh se \u00e7far\u00eb po ndodh. N\u00eb fund, fillojm\u00eb t\u00eb shohim arsyet e problemit t\u00eb megapaket\u00ebs. Thelbi i problemit \u00ebsht\u00eb se, n\u00eb marrjen e vendimit n\u00ebse duhet t\u00eb transmetohet veprimi i ndryshimit t\u00eb zgjedhjes, logjika e zgjedhjes s\u00eb entiteteve mb\u00ebshtetet n\u00eb<\/p>\n<p>, e cila gjendje nuk e ka gjithmon\u00eb informacionin e sakt\u00eb. Prandaj, megapaketa gjenerohet n\u00eb m\u00ebnyr\u00eb t\u00eb till\u00eb: <i>Latency State<\/i>Lojtari kishte probleme me koneksionin.<\/p>\n<ol>\n<li>Mekanizmat e humbjes s\u00eb takt\u00ebve dhe rregullimit t\u00eb vones\u00ebs p\u00ebr vajtje-ardhje intervenojn\u00eb.<\/li>\n<li>Radh\u00ebt e gjendjes s\u00eb vonesave nuk i marrin parasysh k\u00ebta mekanizma. Kjo \u00e7on n\u00eb faktin se disa veprime b\u00ebhen t\u00eb fshir\u00eb paraprakisht ose realizohen n\u00eb rend t\u00eb gabuar, duke \u00e7uar n\u00eb<\/li>\n<li>Lojtari humb problemin e koneksionit dhe, p\u00ebr t'u p\u00ebrshtatur me serverin, simulohet deri n\u00eb 400 takt\u00eb. <i>Latency State<\/i>.<\/li>\n<li>N\u00eb \u00e7do takt gjenerohet dhe p\u00ebrgatitet p\u00ebr t'u d\u00ebrguar n\u00eb server nj\u00eb veprim t\u00eb ri t\u00eb ndryshimit t\u00eb zgjedhjes s\u00eb entitetit.<\/li>\n<li>Klienti i d\u00ebrgon serverit nj\u00eb megapaket\u00eb me m\u00eb shum\u00eb se 400 ndryshime t\u00eb zgjedhjes s\u00eb entiteteve (edhe veprime t\u00eb tjera, si gjendja e t\u00eb gjuajturit, ecjes etj. gjithashtu vuajn\u00eb nga ky problem).<\/li>\n<li>Serveri merr 400 veprime inputi. Duke qen\u00eb se nuk i lejohet t\u00eb humbas\u00eb asnj\u00eb veprim inputi, ai urdh\u00ebron t\u00eb gjith\u00eb klient\u00ebt t\u00eb realizojn\u00eb k\u00ebto veprime dhe i d\u00ebrgon ato p\u00ebrmes rrjetit.<\/li>\n<li>Ironia \u00ebsht\u00eb se mekanizmi i dizajnuar p\u00ebr t\u00eb kursyer kapacitetin e kanalit, p\u00ebrfundimisht shkaktonte paketa rrjeti shum\u00eb t\u00eb m\u00ebdha.<\/li>\n<\/ol>\n<p>\nNe e zgjidh\u00ebm k\u00ebt\u00eb problem duke rregulluar t\u00eb gjitha rastet kufitare t\u00eb azhurnimit dhe duke mb\u00ebshtetur radh\u00ebt e vonesave. Edhe pse kjo k\u00ebrkoi shum\u00eb koh\u00eb, n\u00eb fund ia doli t\u00eb realizohet gjith\u00e7ka si\u00e7 duhet, n\u00eb vend q\u00eb t\u00eb mb\u00ebshteteshim n\u00eb hack t\u00eb shpejt\u00eb.<\/p>\n<p>Ne e zgjidhur ky problem duke korrigjuar t\u00eb gjitha rastet kufitare t\u00eb p\u00ebrdit\u00ebsimit dhe mb\u00ebshtetjes s\u00eb radh\u00ebve t\u00eb vonesave. Edhe pse kjo mori nj\u00eb koh\u00eb t\u00eb konsiderueshme, n\u00eb fund ja vlen t\u00eb realizosh gjith\u00e7ka si\u00e7 duhet, sesa t\u00eb mb\u00ebshtetesh n\u00eb hack t\u00eb shpejt\u00eb.<br \/>\n<br \/>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/466135\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u043c\u0430\u0435 \u044d\u0442\u043e\u0433\u043e \u0433\u043e\u0434\u0430 \u044f \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0433\u0440\u043e\u043a\u0430 \u0432 MMO-\u043c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u0438 KatherineOfSky. \u042f \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0433\u0440\u043e\u043a\u043e\u0432 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430, \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u0436\u0434\u044b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442 \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u00ab\u043e\u0442\u0432\u0430\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f\u00bb. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e \u0434\u043b\u044f \u0432\u0430\u0441 (\u043d\u043e \u043d\u0435 \u0434\u043b\u044f \u043c\u0435\u043d\u044f), \u044f \u0431\u044b\u043b \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0442\u0435\u0445 \u0438\u0433\u0440\u043e\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u043b\u0438\u0441\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u042f \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u044f\u043b \u044d\u0442\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28381,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37812","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u043c\u0430\u0435 \u044d\u0442\u043e\u0433\u043e \u0433\u043e\u0434\u0430 \u044f \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0433\u0440\u043e\u043a\u0430 \u0432 MMO-\u043c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u0438 KatherineOfSky. \u042f \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0433\u0440\u043e\u043a\u043e\u0432 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430, \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u0436\u0434\u044b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442 \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u00ab\u043e\u0442\u0432\u0430\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f\u00bb. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e \u0434\u043b\u044f \u0432\u0430\u0441 (\u043d\u043e \u043d\u0435 \u0434\u043b\u044f \u043c\u0435\u043d\u044f), \u044f \u0431\u044b\u043b \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0442\u0435\u0445 \u0438\u0433\u0440\u043e\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u043b\u0438\u0441\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u042f \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u044f\u043b \u044d\u0442\u043e\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/megapaket-kak-razrabotchikam-factorio-udalos-reshit-problemu-s-multipleerom-na-200-igrokov\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041c\u0435\u0433\u0430\u043f\u0430\u043a\u0435\u0442: \u043a\u0430\u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c Factorio \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u0435\u0440\u043e\u043c \u043d\u0430 200 \u0438\u0433\u0440\u043e\u043a\u043e\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u043c\u0430\u0435 \u044d\u0442\u043e\u0433\u043e \u0433\u043e\u0434\u0430 \u044f \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0433\u0440\u043e\u043a\u0430 \u0432 MMO-\u043c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u0438 KatherineOfSky. \u042f \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0433\u0440\u043e\u043a\u043e\u0432 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430, \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u0436\u0434\u044b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442 \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u00ab\u043e\u0442\u0432\u0430\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f\u00bb. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e \u0434\u043b\u044f \u0432\u0430\u0441 (\u043d\u043e \u043d\u0435 \u0434\u043b\u044f \u043c\u0435\u043d\u044f), \u044f \u0431\u044b\u043b \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0442\u0435\u0445 \u0438\u0433\u0440\u043e\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u043b\u0438\u0441\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u042f \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u044f\u043b \u044d\u0442\u043e\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/megapaket-kak-razrabotchikam-factorio-udalos-reshit-problemu-s-multipleerom-na-200-igrokov\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:19:55+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:19:55+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Paket\u00eb e madhe: si arrit\u00ebn zhvilluesit e Factorio t\u00eb zgjidhnin problemin me multiplayerin p\u00ebr 200 lojtar\u00eb | ProHoster","description":"N\u00eb maj t\u00eb k\u00ebtij viti mora pjes\u00eb si lojtar n\u00eb ngjarjen MMO KatherineOfSky. Vura re se, kur numri i lojtar\u00ebve arrin nj\u00eb num\u00ebr t\u00eb caktuar, \u00e7do disa minuta nj\u00eb pjes\u00eb e tyre \"ndalon s\u00eb ekzistuari\". Fatkeq\u00ebsisht p\u00ebr ju (por jo p\u00ebr mua), isha nj\u00eb nga ata lojtar\u00eb q\u00eb u \u00e7aktivizuan \u00e7do her\u00eb, edhe me nj\u00eb lidhje t\u00eb mir\u00eb. E perceva k\u00ebt\u00eb","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/megapaket-kak-razrabotchikam-factorio-udalos-reshit-problemu-s-multipleerom-na-200-igrokov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041c\u0435\u0433\u0430\u043f\u0430\u043a\u0435\u0442: \u043a\u0430\u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c Factorio \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u0435\u0440\u043e\u043c \u043d\u0430 200 \u0438\u0433\u0440\u043e\u043a\u043e\u0432 | ProHoster","og:description":"\u0412 \u043c\u0430\u0435 \u044d\u0442\u043e\u0433\u043e \u0433\u043e\u0434\u0430 \u044f \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0433\u0440\u043e\u043a\u0430 \u0432 MMO-\u043c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u0438 KatherineOfSky. \u042f \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0433\u0440\u043e\u043a\u043e\u0432 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430, \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u0436\u0434\u044b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442 \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u00ab\u043e\u0442\u0432\u0430\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f\u00bb. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e \u0434\u043b\u044f \u0432\u0430\u0441 (\u043d\u043e \u043d\u0435 \u0434\u043b\u044f \u043c\u0435\u043d\u044f), \u044f \u0431\u044b\u043b \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0442\u0435\u0445 \u0438\u0433\u0440\u043e\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u043b\u0438\u0441\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u042f \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u044f\u043b \u044d\u0442\u043e","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/megapaket-kak-razrabotchikam-factorio-udalos-reshit-problemu-s-multipleerom-na-200-igrokov","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:19:55+00:00","article:modified_time":"2019-10-31T19:19:55+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37812","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 19:22:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:20:22","updated":"2026-01-23 19:22:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/37812","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=37812"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/37812\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/28381"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=37812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=37812"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=37812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}