{"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\/sk\/blog\/administrirovanie\/megapaket-kak-razrabotchikam-factorio-udalos-reshit-problemu-s-multipleerom-na-200-igrokov","title":{"rendered":"Megapaket: ako sa v\u00fdvoj\u00e1rom Factorio podarilo vyrie\u0161i\u0165 probl\u00e9m s multiplayerom pre 200 hr\u00e1\u010dov","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Megapaket: ako sa v\u00fdvoj\u00e1rom Factorio podarilo vyrie\u0161i\u0165 probl\u00e9m s multiplayerom pre 200 hr\u00e1\u010dov\" src=\"\/wp-content\/uploads\/2019\/09\/135544365299791de479555734645ef2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nV m\u00e1ji tohto roka som sa z\u00fa\u010dastnil ako hr\u00e1\u010d na <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/d_DlvkTK9hU\">MMO podujat\u00ed KatherineOfSky<\/a><\/noindex>. V\u0161imol som si, \u017ee ke\u010f po\u010det hr\u00e1\u010dov dosiahne ur\u010dit\u00fd po\u010det, \u010das od \u010dasu sa \u010das\u0165 z nich \"odpoj\u00ed\". Na\u0161\u0165astie pre v\u00e1s (ale nie pre m\u0148a) som bol jedn\u00fdm z t\u00fdch hr\u00e1\u010dov, ktor\u00ed sa odpojili <b>ka\u017ed\u00fdkr\u00e1t<\/b>, aj ke\u010f som mal dobr\u00e9 pripojenie. Vn\u00edmal som to ako osobn\u00fa v\u00fdzvu a za\u010dal som h\u013eada\u0165 pr\u00ed\u010diny probl\u00e9mu. Po troch t\u00fd\u017ed\u0148och ladenia, testovania a opr\u00e1v bola chyba kone\u010dne odstr\u00e1nen\u00e1, ale t\u00e1to cesta nebola v\u00f4bec jednoduch\u00e1.<\/p>\n<p>Probl\u00e9my pri multiplayerov\u00fdch hr\u00e1ch s\u00fa ve\u013emi \u0165a\u017eko sledovate\u013en\u00e9. Zvy\u010dajne sa vyskytuj\u00fa za ve\u013emi \u0161pecifick\u00fdch podmienok parametrov siet\u00ed a pri ve\u013emi \u0161pecifick\u00fdch stavoch hry (v tomto pr\u00edpade pr\u00edtomnosti viac ako 200 hr\u00e1\u010dov). A aj ke\u010f sa podar\u00ed probl\u00e9m reprodukova\u0165, nie je mo\u017en\u00e9 ho riadne debuggova\u0165, preto\u017ee vlo\u017eenie kontroln\u00fdch bodov zastavuje hru, m\u00e4tie \u010dasova\u010de a zvy\u010dajne vedie k ukon\u010deniu pripojenia z d\u00f4vodu prekro\u010denia \u010dasov\u00e9ho limitu. Ale v\u010faka vytrvalosti a \u00fa\u017easn\u00e9mu n\u00e1stroju s n\u00e1zvom <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jagt\/clumsy\">clumsy<\/a><\/noindex> sa mi podarilo zisti\u0165, \u010do sa deje.<\/p>\n<p>Aby som to zhrnul: kv\u00f4li chybe a ne\u00faplnej implement\u00e1cii simul\u00e1cie stavu oneskoreniami sa klient niekedy ocitol v situ\u00e1cii, ke\u010f musel za jeden krok odosla\u0165 sie\u0165ov\u00fd paket, ktor\u00fd pozost\u00e1val z akci\u00ed hr\u00e1\u010da v\u00fdberu pribli\u017ene 400 hern\u00fdch entity (naz\u00fdvame to \"megapaket\"). Po tom mus\u00ed server nielen spr\u00e1vne prija\u0165 v\u0161etky tieto akcie vstupu, ale aj ich odosla\u0165 v\u0161etk\u00fdm ostatn\u00fdm klientom. Ak m\u00e1te 200 klientov, to r\u00fdchlo predstavuje probl\u00e9m. Kan\u00e1l k serveru sa r\u00fdchlo zapln\u00ed, \u010do vedie k strate paketov a kask\u00e1de op\u00e4tovne po\u017eadovan\u00fdch paketov. Odlo\u017eenie akci\u00ed vstupu potom vedie k tomu, \u017ee e\u0161te viac klientov za\u010d\u00edna odosiela\u0165 megapakety, a ich lav\u00edna sa st\u00e1va e\u0161te silnej\u0161ou. \u0160\u0165astn\u00fdm klientom sa podar\u00ed obnovi\u0165, v\u0161etci ostatn\u00ed \"odpad\u00e1vaj\u00fa\".<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<img decoding=\"async\" alt=\"Megapaket: ako sa v\u00fdvoj\u00e1rom Factorio podarilo vyrie\u0161i\u0165 probl\u00e9m s multiplayerom pre 200 hr\u00e1\u010dov\" src=\"\/wp-content\/uploads\/2019\/09\/ff1a60d55eb6f5a4dc7be4b826d747f0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nProbl\u00e9m bol dos\u0165 z\u00e1sadn\u00fd a oprava mi trvala 2 t\u00fd\u017edne. Je to dos\u0165 technick\u00e9, tak\u017ee ni\u017e\u0161ie vysvetl\u00edm niektor\u00e9 technick\u00e9 detaily. Ale najsk\u00f4r mus\u00edte vedie\u0165, \u017ee od verzie 0.17.54, vydanej 4. j\u00fana, sa podmienky do\u010dasn\u00fdch probl\u00e9mov s pripojen\u00edm v multihr\u00e1ch stali stabilnej\u0161\u00edmi a skr\u00fdvanie latencie ove\u013ea menej glitchovalo (menej lagovania a teleportovania). Okrem toho som zmenil sp\u00f4sob skr\u00fdvania latencie v boji a d\u00fafam, \u017ee v\u010faka tomu bude tro\u0161ku plynulej\u0161ie.<\/p>\n<h3>Mnohopou\u017e\u00edvate\u013esk\u00fd megapaket \u2013 technick\u00e9 podrobnosti<\/h3>\n<p>\nJednoduch\u00e9 vysvetlenie, ako funguje multiplayer v hre: v\u0161etci klienti simuluj\u00fa stav hry, prij\u00edmaj\u00fa a posielaj\u00fa iba vstupy hr\u00e1\u010da (naz\u00fdvan\u00e9 \u201evstupn\u00e9 akcie\u201c, <i>Input Actions<\/i>). Hlavn\u00e1 \u00faloha servera je prenos <i>Input Actions<\/i> a kontrola toho, \u017ee v\u0161etci klienti vykon\u00e1vaj\u00fa rovnak\u00e9 akcie v jednom takte. Viac o tom si m\u00f4\u017eete pre\u010d\u00edta\u0165 v pr\u00edspevku <noindex><a rel=\"nofollow\" href=\"https:\/\/www.factorio.com\/blog\/post\/fff-149\">FFF-149<\/a><\/noindex>.<\/p>\n<p>Ke\u010f\u017ee server mus\u00ed prij\u00edma\u0165 rozhodnutia o tom, ak\u00e9 akcie sa maj\u00fa vykon\u00e1va\u0165, akcia hr\u00e1\u010da sa pohybuje asi takto: akcia hr\u00e1\u010da \u2192 hern\u00fd klient \u2192 sie\u0165 \u2192 server \u2192 sie\u0165 \u2192 hern\u00fd klient. To znamen\u00e1, \u017ee ka\u017ed\u00e1 akcia hr\u00e1\u010da sa vykon\u00e1 iba po tom, ako prejde tam a sp\u00e4\u0165 cez sie\u0165. Z toho d\u00f4vodu by sa hra zdala hrozne trhan\u00e1, a preto bol takmer okam\u017eite po n\u00e1stupe multiplayeru do hry zaveden\u00fd mechanizmus skr\u00fdvania latencie. Skr\u00fdvanie latencie simuluje vstupy hr\u00e1\u010da bez oh\u013eadu na akcie in\u00fdch hr\u00e1\u010dov a rozhodovania servera.<\/p>\n<p><img decoding=\"async\" alt=\"Megapaket: ako sa v\u00fdvoj\u00e1rom Factorio podarilo vyrie\u0161i\u0165 probl\u00e9m s multiplayerom pre 200 hr\u00e1\u010dov\" src=\"\/wp-content\/uploads\/2019\/09\/0b66a3b07d6aa2ab1d2329d782c78615.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVo Factorio je hern\u00fd stav <i>Game State<\/i> \u2014 to je kompletn\u00fd stav mapy, hr\u00e1\u010da, ent\u00edt a v\u0161etk\u00e9ho ostatn\u00e9ho. Simuluje sa deterministicky vo v\u0161etk\u00fdch klientoch na z\u00e1klade akci\u00ed prijat\u00fdch od servera. Hern\u00fd stav je sv\u00e4t\u00fd a ak sa niekedy za\u010dne odli\u0161ova\u0165 od servera alebo ak\u00e9hoko\u013evek in\u00e9ho klienta, nastane desynchroniz\u00e1cia.<\/p>\n<p>Okrem <i>Game State<\/i> m\u00e1me stav latencie <i>Latency State<\/i>. Obsahuje mal\u00e9 podmno\u017estvo z\u00e1kladn\u00e9ho stavu. <i>Latency State<\/i> nie je sv\u00e4t\u00fd a jednoducho predstavuje obraz toho, ako bude vyzera\u0165 stav hry v bud\u00facnosti na z\u00e1klade vstupu hr\u00e1\u010da. <i>Input Actions<\/i>.<\/p>\n<p>Na to uchov\u00e1vame k\u00f3piu vytv\u00e1ran\u00fdch <i>Input Actions<\/i> v porad\u00ed latenci\u00ed.<\/p>\n<p><img decoding=\"async\" alt=\"Megapaket: ako sa v\u00fdvoj\u00e1rom Factorio podarilo vyrie\u0161i\u0165 probl\u00e9m s multiplayerom pre 200 hr\u00e1\u010dov\" src=\"\/wp-content\/uploads\/2019\/09\/31e43263d1d2bfc79700730978fcd02a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTeda na konci procesu na strane klienta vyzer\u00e1 obrazec zhruba takto:<\/p>\n<ol>\n<li>Pou\u017e\u00edvame <i>Input Actions<\/i> v\u0161etk\u00fdch hr\u00e1\u010dov na <i>Game State<\/i> tak, ako boli tieto vstupn\u00e9 akcie prijat\u00e9 zo servera.<\/li>\n<li>Odstra\u0148ujeme z frontu oneskoren\u00ed v\u0161etky <i>Input Actions<\/i>, ktor\u00e9, pod\u013ea \u00fadajov servera, u\u017e boli aplikovan\u00e9 na <i>Game State<\/i>.<\/li>\n<li>Odstra\u0148ujeme <i>Latency State<\/i> a resetujeme ho tak, aby vyzeral presne tak ako <i>Game State<\/i>.<\/li>\n<li>Pou\u017e\u00edvame v\u0161etky akcie z frontu oneskoren\u00ed na <i>Latency State<\/i>.<\/li>\n<li>Na z\u00e1klade \u00fadajov <i>Game State<\/i> a <i>Latency State<\/i> renderujeme hru hr\u00e1\u010dovi.<\/li>\n<\/ol>\n<p>\nTo v\u0161etko sa opakuje v ka\u017edom takte.<\/p>\n<p>Pr\u00edli\u0161 zlo\u017eit\u00e9? Nenech\u00e1vajte sa znepokoji\u0165, to e\u0161te nie je v\u0161etko. Aby sme vyrovnali neistoty internetov\u00fdch pripojen\u00ed, vytvorili sme dva mechanizmy:<\/p>\n<ul>\n<li>Ch\u00fdbaj\u00face takty: ke\u010f server rozhodne, \u017ee <i>Input Actions<\/i> bud\u00fa vykonan\u00e9 v hernom takte, tak ak nedostal <i>Input Actions<\/i> nejak\u00e9ho hr\u00e1\u010da (napr\u00edklad kv\u00f4li zv\u00fd\u0161enej latencii), nebude \u010daka\u0165, ale ozn\u00e1mi tomuto klientovi \u201enezoh\u013eadnil som tvoje <i>Input Actions<\/i>, pok\u00fasim sa ich prida\u0165 do nasleduj\u00faceho taktu\u201c. Takto je to uroben\u00e9, aby kv\u00f4li probl\u00e9mom s pripojen\u00edm (alebo s po\u010d\u00edta\u010dom) jedn\u00e9ho hr\u00e1\u010da sa aktualiz\u00e1cia mapy nezpozdila pre v\u0161etk\u00fdch ostatn\u00fdch. Je d\u00f4le\u017eit\u00e9 poznamen\u00e1va\u0165, \u017ee <i>Input Actions<\/i> nie s\u00fa ignorovan\u00e9, len s\u00fa odlo\u017een\u00e9.<\/li>\n<li>Celkov\u00e1 oneskoren\u00e1 doba cesty tam a sp\u00e4\u0165: server sa sna\u017e\u00ed odhadn\u00fa\u0165, ak\u00e9 je oneskorenie prenosu \u00fadajov tam a sp\u00e4\u0165 medzi klientom a serverom pre ka\u017ed\u00e9ho klienta. Ka\u017ed\u00fdch 5 sek\u00fand diskutuje s klientom o novej latencii (v z\u00e1vislosti na spr\u00e1van\u00ed pripojenia v minulosti) a primerane zvy\u0161uje alebo zni\u017euje latenciu prenosu \u00fadajov tam a sp\u00e4\u0165.<\/li>\n<\/ul>\n<p>\nSamotn\u00e9 tieto mechanizmy s\u00fa dos\u0165 jednoduch\u00e9, ale ke\u010f sa pou\u017e\u00edvaj\u00fa spolu (\u010do sa \u010dasto st\u00e1va pri probl\u00e9moch s pripojen\u00edm), logika k\u00f3du sa st\u00e1va \u0165a\u017eko ovl\u00e1date\u013enou a m\u00e1 ve\u013ea okrajov\u00fdch pr\u00edpadov. Okrem toho, ke\u010f sa tieto mechanizmy zapoja, server a front oneskoren\u00ed musia spr\u00e1vne aplikova\u0165 \u0161peci\u00e1lny <i>Input Action<\/i> s n\u00e1zvom <i>StopMovementInTheNextTick<\/i>. V\u010faka tomu, pri probl\u00e9moch s pripojen\u00edm, sa postava nebude samovo\u013ene pohybova\u0165 (napr\u00edklad pod vlak).<\/p>\n<p>Teraz v\u00e1m mus\u00edme vysvetli\u0165, ako funguje v\u00fdber ent\u00edt. Jeden z pren\u00e1\u0161an\u00fdch typov <i>Input Action<\/i> \u2014 je to zmena stavu v\u00fdberu entity. Ozn\u00e1mi to v\u0161etk\u00fdm, na ktor\u00fa entitu sa hr\u00e1\u010d zameral kurzorom my\u0161i. Ako mo\u017eno pochopi\u0165, je to jedna z naj\u010dastej\u0161\u00edch akci\u00ed vstupu, ktor\u00e9 posielaj\u00fa klienti, preto sme ju optimalizovali tak, aby zaberala \u010do najmen\u0161\u00ed objem pre \u0161etrenie \u0161\u00edrky p\u00e1sma kan\u00e1la. Implementovan\u00e9 je to takto: pri v\u00fdbere ka\u017edej entity sa namiesto ulo\u017eenia absol\u00fatnych, vysokopresn\u00fdch s\u00faradn\u00edc mapy uchov\u00e1vaj\u00fa n\u00edzkope\u0161n\u00e9 relat\u00edvne posuny od predch\u00e1dzaj\u00faceho v\u00fdberu. Funguje to dobre, preto\u017ee v\u00fdber my\u0161ou sa zvy\u010dajne uskuto\u010d\u0148uje ve\u013emi bl\u00edzko k predch\u00e1dzaj\u00facemu v\u00fdberu. Z tohto d\u00f4vodu existuj\u00fa dva d\u00f4le\u017eit\u00e9 po\u017eiadavky: <i>Input Actions<\/i> nikdy ich netreba vynecha\u0165 a je potrebn\u00e9 ich vykon\u00e1va\u0165 v spr\u00e1vnom porad\u00ed. Tieto po\u017eiadavky s\u00fa splnen\u00e9 pre <i>Game State<\/i>. Ale preto\u017ee \u00faloha <i>Stav latencie<\/i> je v tom, aby \u201evyzeral dostato\u010dne dobre\u201c pre hr\u00e1\u010da, v stave latenci\u00ed nie s\u00fa splnen\u00e9. <i>Latency State<\/i> nerozm\u00fd\u0161\u013ea o <noindex><a rel=\"nofollow\" href=\"https:\/\/cdn.factorio.com\/assets\/img\/blog\/fff-302-megapacket-commit.jpg\">mnoh\u00fdch okrajov\u00fdch pr\u00edpadoch<\/a><\/noindex>, ktor\u00e9 s\u00favisia s preskakovan\u00edm takto a zmenami latencie prenosu tam a sp\u00e4\u0165.<\/p>\n<p>U\u017e m\u00f4\u017eete h\u00e1da\u0165, kam to v\u0161etko smeruje. Kone\u010dne za\u010d\u00edname vidie\u0165 pr\u00ed\u010diny probl\u00e9mu megabal\u00edka. Korene probl\u00e9mu s\u00fa v tom, \u017ee pri rozhodovan\u00ed o tom, \u010di posla\u0165 akciu zmeny v\u00fdberu, logika v\u00fdberu ent\u00edt sa spolieha na <i>Latency State<\/i>, a tento stav neobsahuje v\u017edy spr\u00e1vne inform\u00e1cie. Preto sa megabal\u00edk generuje pribli\u017ene takto:<\/p>\n<ol>\n<li>Hr\u00e1\u010d m\u00e1 probl\u00e9my s pripojen\u00edm.<\/li>\n<li>Do hry vstupuj\u00fa mechanizmy preskakovania taktov a regul\u00e1cie latencie prenosu tam a sp\u00e4\u0165.<\/li>\n<li>Rada stavu latencie nezoh\u013ead\u0148uje tieto mechanizmy. To vedie k tomu, \u017ee niektor\u00e9 akcie s\u00fa odstra\u0148ovan\u00e9 pred\u010dasne alebo sa vykon\u00e1vaj\u00fa v nespr\u00e1vnom porad\u00ed, \u010do vedie k nespr\u00e1vnemu <i>Latency State<\/i>.<\/li>\n<li>Hr\u00e1\u010dovi zmizla probl\u00e9m s pripojen\u00edm a aby dohnal server, simuluje a\u017e 400 taktov.<\/li>\n<li>V ka\u017edom takte sa generuje a pripravuje na odoslanie na server nov\u00e1 akcia zmeny v\u00fdberu entity.<\/li>\n<li>Klient posiela serveru megabal\u00edk zo 400 a viac zmien v\u00fdberu ent\u00edt (a s in\u00fdmi akciami: stav stre\u013eby, ch\u00f4dze a pod. sa tie\u017e stret\u00e1vali s t\u00fdmto probl\u00e9mom).<\/li>\n<li>Server prij\u00edma 400 vstupn\u00fdch po\u017eiadaviek. Ke\u010f\u017ee mu nie je povolen\u00e9 vynecha\u0165 ani jednu vstupn\u00fa po\u017eiadavku, prik\u00e1\u017ee v\u0161etk\u00fdm klientom vykona\u0165 tieto po\u017eiadavky a odosla\u0165 ich cez sie\u0165.<\/li>\n<\/ol>\n<p>\nIroni\u00ed je, \u017ee mechanizmus navrhnut\u00fd na \u00fasporu \u0161\u00edrky p\u00e1sma kan\u00e1la nakoniec vytvoril obrovsk\u00e9 sie\u0165ov\u00e9 paketov\u00e9 s\u00fabory.<\/p>\n<p>T\u00fato probl\u00e9m sme vyrie\u0161ili opravou v\u0161etk\u00fdch okrajov\u00fdch pr\u00edpadov aktualiz\u00e1cie a podpory frontu oneskoren\u00ed. Aj ke\u010f to trvalo dos\u0165 dlh\u00fa dobu, nakoniec st\u00e1l za to implementova\u0165 v\u0161etko spr\u00e1vne, a nie sa spolieha\u0165 na r\u00fdchle hacky.<br \/>\n<br \/>Zdroj: <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.3 - aioseo.com -->\n\t<meta name=\"description\" content=\".\" \/>\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\/sk\/blog\/administrirovanie\/megapaket-kak-razrabotchikam-factorio-udalos-reshit-problemu-s-multipleerom-na-200-igrokov\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\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=\".\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sk\/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\udd47Mega bal\u00edk: ako sa v\u00fdvoj\u00e1rom Factorio podarilo vysporiada\u0165 sa s probl\u00e9mom multiplayeru pre 200 hr\u00e1\u010dov | ProHoster","description":".","canonical_url":"https:\/\/prohoster.info\/sk\/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":"sk_SK","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":".","og:url":"https:\/\/prohoster.info\/sk\/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\/sk\/wp-json\/wp\/v2\/posts\/37812","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=37812"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/37812\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/28381"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=37812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=37812"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=37812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}