{"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\/cs\/blog\/administrirovanie\/megapaket-kak-razrabotchikam-factorio-udalos-reshit-problemu-s-multipleerom-na-200-igrokov","title":{"rendered":"Mega bal\u00ed\u010dek: jak se v\u00fdvoj\u00e1\u0159\u016fm Factorio poda\u0159ilo vy\u0159e\u0161it probl\u00e9m s multiplayerem pro 200 hr\u00e1\u010d\u016f","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Mega bal\u00ed\u010dek: jak se v\u00fdvoj\u00e1\u0159\u016fm Factorio poda\u0159ilo vy\u0159e\u0161it probl\u00e9m s multiplayerem pro 200 hr\u00e1\u010d\u016f\" src=\"\/wp-content\/uploads\/2019\/09\/135544365299791de479555734645ef2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nV kv\u011btnu tohoto roku jsem se z\u00fa\u010dastnil jako hr\u00e1\u010d <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/d_DlvkTK9hU\">MMO ud\u00e1losti KatherineOfSky<\/a><\/noindex>. Uvedomil jsem si, \u017ee kdy\u017e po\u010det hr\u00e1\u010d\u016f dos\u00e1hne ur\u010dit\u00e9ho po\u010dtu, ka\u017ed\u00fdch p\u00e1r minut \u010d\u00e1st z nich vypad\u00e1v\u00e1. Na\u0161t\u011bst\u00ed pro v\u00e1s (ale ne pro m\u011b) jsem byl jedn\u00edm z t\u011bch hr\u00e1\u010d\u016f, kte\u0159\u00ed se odpojili <b>ka\u017ed\u00fd \u010das<\/b>, i p\u0159i dobr\u00e9m p\u0159ipojen\u00ed. Vzali jsem to jako osobn\u00ed v\u00fdzvu a za\u010dal jsem hledat p\u0159\u00ed\u010diny probl\u00e9mu. Po t\u0159ech t\u00fddnech lad\u011bn\u00ed, testov\u00e1n\u00ed a oprav chyby byla kone\u010dn\u011b odstran\u011bna, ale tato cesta nebyla tak jednoduch\u00e1.<\/p>\n<p>Probl\u00e9my s multiplayerov\u00fdmi hrami se velmi t\u011b\u017eko sleduj\u00ed. Obvykle se objevuj\u00ed za velmi specifick\u00fdch podm\u00ednek s\u00ed\u0165ov\u00fdch parametr\u016f a ve velmi specifick\u00fdch stavech hry (v tomto p\u0159\u00edpad\u011b - v\u00edce ne\u017e 200 hr\u00e1\u010d\u016f). A dokonce i kdy\u017e se poda\u0159\u00ed probl\u00e9m reprodukovat, nelze jej spr\u00e1vn\u011b ladit, proto\u017ee vkl\u00e1d\u00e1n\u00ed kontroln\u00edch bod\u016f zastavuje hru, mate\u0159sk\u00e9 \u010dasova\u010de a obvykle vede k ukon\u010den\u00ed spojen\u00ed kv\u016fli p\u0159ekro\u010den\u00ed \u010dasov\u00e9ho limitu. Ale d\u00edky vytrvalosti a \u00fa\u017easn\u00e9mu n\u00e1stroji jm\u00e9nem <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jagt\/clumsy\">clumsy<\/a><\/noindex> se mi poda\u0159ilo zjistit, co se d\u011bje.<\/p>\n<p>Stru\u010dn\u011b \u0159e\u010deno: kv\u016fli chyb\u011b a ne\u00fapln\u00e9 implementaci simulace latence se klient ob\u010das ocitne v situaci, kdy mus\u00ed za jeden cyklus odeslat s\u00ed\u0165ov\u00fd paket slo\u017een\u00fd z akc\u00ed hr\u00e1\u010de, co\u017e zahrnuje zhruba 400 hern\u00edch entit (naz\u00fdv\u00e1me to \"megabal\u00ed\u010dek\"). Pot\u00e9 mus\u00ed server nejen spr\u00e1vn\u011b p\u0159ijmout v\u0161echny tyto akce vstupu, ale tak\u00e9 je zaslat v\u0161em ostatn\u00edm klient\u016fm. Pokud m\u00e1te 200 klient\u016f, to se rychle st\u00e1v\u00e1 probl\u00e9mem. Kan\u00e1l k serveru se rychle zapln\u00ed, co\u017e vede ke ztr\u00e1t\u011b paket\u016f a lavin\u011b opakovan\u011b po\u017eadovan\u00fdch paket\u016f. Zpo\u017ed\u011bn\u00ed akc\u00ed vstupu pak zp\u016fsobuje, \u017ee je\u0161t\u011b v\u00edce klient\u016f za\u010dne pos\u00edlat megabal\u00ed\u010dky, co\u017e vyvol\u00e1v\u00e1 dal\u0161\u00ed lavinu. \u0160\u0165astn\u00fdm klient\u016fm se poda\u0159\u00ed zotavit, ostatn\u00ed se \"odpoj\u00ed\".<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<img decoding=\"async\" alt=\"Mega bal\u00ed\u010dek: jak se v\u00fdvoj\u00e1\u0159\u016fm Factorio poda\u0159ilo vy\u0159e\u0161it probl\u00e9m s multiplayerem pro 200 hr\u00e1\u010d\u016f\" src=\"\/wp-content\/uploads\/2019\/09\/ff1a60d55eb6f5a4dc7be4b826d747f0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nProbl\u00e9m byl dost z\u00e1sadn\u00ed a trvalo mi dva t\u00fddny, ne\u017e jsem ho vy\u0159e\u0161il. Je celkem technick\u00fd, tak\u017ee n\u00ed\u017ee vysv\u011btl\u00edm \u0161\u0165avnat\u00e9 technick\u00e9 podrobnosti. Ale nejprve byste m\u011bli v\u011bd\u011bt, \u017ee od verze 0.17.54, vydan\u00e9 4. \u010dervna, se v podm\u00ednk\u00e1ch do\u010dasn\u00fdch probl\u00e9m\u016f s p\u0159ipojen\u00edm stal multiplayer stabiln\u011bj\u0161\u00ed a skr\u00fdv\u00e1n\u00ed latenc\u00ed mnohem m\u00e9n\u011b chybov\u00fdm (m\u00e9n\u011b zpo\u017ed\u011bn\u00ed a teleportov\u00e1n\u00ed). Krom\u011b toho jsem zm\u011bnil zp\u016fsob skr\u00fdv\u00e1n\u00ed latenc\u00ed v boji a douf\u00e1m, \u017ee d\u00edky tomu budou o n\u011bco hlad\u0161\u00ed.<\/p>\n<h3>Multiplayerov\u00fd megabal\u00ed\u010dek \u2014 technick\u00e9 podrobnosti<\/h3>\n<p>\nPokud to zjednodu\u0161\u00edme, multiplayer ve h\u0159e funguje n\u00e1sledovn\u011b: v\u0161ichni klienti simuluj\u00ed stav hry t\u00edm, \u017ee pouze p\u0159ij\u00edmaj\u00ed a odes\u00edlaj\u00ed vstup hr\u00e1\u010de (naz\u00fdvan\u00fd \u201evstupn\u00ed akce\u201c <i>Input Actions<\/i>). Hlavn\u00edm \u00fakolem serveru je p\u0159ed\u00e1vat <i>Input Actions<\/i> a kontrolovat, \u017ee v\u0161ichni klienti prov\u00e1d\u011bj\u00ed stejn\u00e9 akce v jednom taktu. O tom se m\u016f\u017eete v\u00edce do\u010d\u00edst v p\u0159\u00edsp\u011bvku <noindex><a rel=\"nofollow\" href=\"https:\/\/www.factorio.com\/blog\/post\/fff-149\">FFF-149<\/a><\/noindex>.<\/p>\n<p>Jeliko\u017e server mus\u00ed rozhodovat o tom, kter\u00e9 akce se maj\u00ed prov\u00e1d\u011bt, akce hr\u00e1\u010de proch\u00e1z\u00ed p\u0159ibli\u017en\u011b takovou cestou: akce hr\u00e1\u010de -&gt; klient hry -&gt; s\u00ed\u0165 -&gt; server -&gt; s\u00ed\u0165 -&gt; klient hry. To znamen\u00e1, \u017ee ka\u017ed\u00e1 akce hr\u00e1\u010de se prov\u00e1d\u00ed a\u017e po tom, co se dostane tam a zp\u011bt po s\u00edti. Kv\u016fli tomu by se hra zd\u00e1la hrozn\u011b lagovat, proto byl t\u00e9m\u011b\u0159 okam\u017eit\u011b po zaveden\u00ed multiplayeru do hry zaveden mechanismus pro skr\u00fdv\u00e1n\u00ed latenc\u00ed. Skr\u00fdv\u00e1n\u00ed latenc\u00ed simuluje vstup hr\u00e1\u010de bez ohledu na akce ostatn\u00edch hr\u00e1\u010d\u016f a rozhodov\u00e1n\u00ed serveru.<\/p>\n<p><img decoding=\"async\" alt=\"Mega bal\u00ed\u010dek: jak se v\u00fdvoj\u00e1\u0159\u016fm Factorio poda\u0159ilo vy\u0159e\u0161it probl\u00e9m s multiplayerem pro 200 hr\u00e1\u010d\u016f\" src=\"\/wp-content\/uploads\/2019\/09\/0b66a3b07d6aa2ab1d2329d782c78615.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVe Factorio existuje hern\u00ed stav <i>Game State<\/i> \u2014 to je \u00fapln\u00fd stav mapy, hr\u00e1\u010de, entit a v\u0161eho ostatn\u00edho. Je deterministicky simulov\u00e1n ve v\u0161ech klientech na z\u00e1klad\u011b akc\u00ed z\u00edskan\u00fdch ze serveru. Hern\u00ed stav je svat\u00fd, a pokud se n\u011bkdy za\u010dne li\u0161it od serveru nebo jak\u00e9hokoli jin\u00e9ho klienta, dojde k desynchronizaci.<\/p>\n<p>Krom\u011b <i>Game State<\/i> m\u00e1me stav latenc\u00ed <i>Latency State<\/i>. Obsahuje mal\u00e9 podmno\u017estv\u00ed hlavn\u00edho stavu. <i>Latency State<\/i> nen\u00ed svat\u00fd a jednodu\u0161e p\u0159edstavuje obraz toho, jak bude budouc\u00ed stav hry vypadat na z\u00e1klad\u011b zadan\u00e9ho hr\u00e1\u010dem <i>Input Actions<\/i>.<\/p>\n<p>K tomu uchov\u00e1v\u00e1me kopii vytv\u00e1\u0159en\u00fdch <i>Input Actions<\/i> v \u0159ad\u011b latenc\u00ed.<\/p>\n<p><img decoding=\"async\" alt=\"Mega bal\u00ed\u010dek: jak se v\u00fdvoj\u00e1\u0159\u016fm Factorio poda\u0159ilo vy\u0159e\u0161it probl\u00e9m s multiplayerem pro 200 hr\u00e1\u010d\u016f\" src=\"\/wp-content\/uploads\/2019\/09\/31e43263d1d2bfc79700730978fcd02a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNa konci procesu tedy na stran\u011b klienta situace vypad\u00e1 p\u0159ibli\u017en\u011b takto:<\/p>\n<ol>\n<li>Pou\u017e\u00edv\u00e1me <i>Input Actions<\/i> v\u0161echny hr\u00e1\u010de na <i>Game State<\/i> tak, jak byly tyto akce p\u0159ijat\u00e9 ze serveru.<\/li>\n<li>Odstra\u0148ujeme ze seznamu zpo\u017ed\u011bn\u00ed v\u0161echny <i>Input Actions<\/i>, kter\u00e9, podle \u00fadaj\u016f serveru, ji\u017e byly aplikov\u00e1ny na <i>Game State<\/i>.<\/li>\n<li>Odstra\u0148ujeme <i>Latency State<\/i> a resetujeme jej, aby vypadal p\u0159esn\u011b tak, jak <i>Game State<\/i>.<\/li>\n<li>Aplikujeme v\u0161echny akce ze seznamu zpo\u017ed\u011bn\u00ed na <i>Latency State<\/i>.<\/li>\n<li>Na z\u00e1klad\u011b dat <i>Game State<\/i> a <i>Latency State<\/i> renderujeme hru hr\u00e1\u010di.<\/li>\n<\/ol>\n<p>\nTo se opakuje v ka\u017ed\u00e9m cyklu.<\/p>\n<p>P\u0159\u00edli\u0161 slo\u017eit\u00e9? Neztr\u00e1cejte klid, to je\u0161t\u011b nen\u00ed v\u0161echno. Abychom kompenzovali n spolehlivost internetov\u00fdch p\u0159ipojen\u00ed, vytvo\u0159ili jsme dva mechanismy:<\/p>\n<ul>\n<li>Vynechan\u00e9 cykly: kdy\u017e server rozhodne, \u017ee <i>Input Actions<\/i> prob\u011bhnou v hern\u00edm cyklu, pokud neobdr\u017eel <i>Input Actions<\/i> n\u011bjak\u00e9ho hr\u00e1\u010de (nap\u0159\u00edklad kv\u016fli zv\u00fd\u0161en\u00e9mu zpo\u017ed\u011bn\u00ed), ne\u010dek\u00e1, ale ozn\u00e1m\u00ed tomuto klientovi \u201enebral jsem v potaz tv\u00e9 <i>Input Actions<\/i>, pokus\u00edm se je p\u0159idat do dal\u0161\u00edho cyklu\u201c. To je ud\u011bl\u00e1no proto, aby se kv\u016fli probl\u00e9m\u016fm se spojen\u00edm (nebo po\u010d\u00edta\u010dem) jednoho hr\u00e1\u010de nezpozdilo aktualizace mapy pro ostatn\u00ed. Je t\u0159eba poznamenat, \u017ee <i>Input Actions<\/i> nejsou ignorov\u00e1ny, ale jednodu\u0161e odlo\u017eeny.<\/li>\n<li>Zpo\u017ed\u011bn\u00ed celkov\u00e9 cesty tam a zp\u011bt: server se sna\u017e\u00ed odhadnout, jak\u00e1 je latence p\u0159enosu dat tam a zp\u011bt mezi klientem a serverem pro ka\u017ed\u00e9ho klienta. Ka\u017ed\u00fdch 5 sekund prob\u00edh\u00e1 p\u0159i pot\u0159eb\u011b diskuse s klientem o nov\u00e9 latenci (v z\u00e1vislosti na tom, jak se chovalo p\u0159ipojen\u00ed v minulosti) a podle toho zvy\u0161uje nebo sni\u017euje latenci p\u0159enosu dat tam a zp\u011bt.<\/li>\n<\/ul>\n<p>\nTyto mechanismy samy o sob\u011b jsou docela jednoduch\u00e9, ale kdy\u017e se pou\u017e\u00edvaj\u00ed spole\u010dn\u011b (co\u017e se \u010dasto st\u00e1v\u00e1 p\u0159i probl\u00e9mech s p\u0159ipojen\u00edm), logika k\u00f3du se st\u00e1v\u00e1 obt\u00ed\u017en\u011b ovladatelnou a m\u00e1 spoustu okrajov\u00fdch p\u0159\u00edpad\u016f. Nav\u00edc, kdy\u017e se tyto mechanismy zapoj\u00ed, server a fronta zpo\u017ed\u011bn\u00ed mus\u00ed spr\u00e1vn\u011b implementovat speci\u00e1ln\u00ed <i>Akci vstupu<\/i> nazvanou <i>Zastavit pohyb v n\u00e1sleduj\u00edc\u00edm taktu<\/i>. D\u00edky tomu, p\u0159i probl\u00e9mech s p\u0159ipojen\u00edm, postava nebude b\u011bhat sama (nap\u0159\u00edklad pod vlakem).<\/p>\n<p>Nyn\u00ed je t\u0159eba v\u00e1m vysv\u011btlit, jak funguje v\u00fdb\u011br entit. Jeden z p\u0159ed\u00e1van\u00fdch typ\u016f <i>Akci vstupu<\/i> \u2014 je to zm\u011bna stavu v\u00fdb\u011bru entity. Oznamuje to v\u0161em, na kterou entitu hr\u00e1\u010d najezdil my\u0161\u00ed. Jak lze pochopit, je to jedna z nej\u010dast\u011bj\u0161\u00edch vstupn\u00edch akc\u00ed odes\u00edlan\u00fdch klienty, proto jsme to optimalizovali tak, aby zab\u00edralo co nejm\u00e9n\u011b m\u00edsta. Bylo to realizov\u00e1no tak, \u017ee p\u0159i v\u00fdb\u011bru ka\u017ed\u00e9 entity se m\u00edsto uchov\u00e1n\u00ed absolutn\u00edch, vysoce p\u0159esn\u00fdch sou\u0159adnic mapy ukl\u00e1d\u00e1 n\u00edzko p\u0159esn\u00e9 relativn\u00ed posunut\u00ed od p\u0159edchoz\u00edho v\u00fdb\u011bru. To funguje dob\u0159e, proto\u017ee my\u0161\u00ed vybr\u00e1n\u00ed obvykle prob\u00edh\u00e1 velmi bl\u00edzko p\u0159edchoz\u00edmu v\u00fdb\u011bru. Z toho vypl\u00fdvaj\u00ed dv\u011b d\u016fle\u017eit\u00e1 po\u017eadavky: <i>Input Actions<\/i> nikdy nesm\u00ed b\u00fdt vynech\u00e1ny a mus\u00ed b\u00fdt prov\u00e1d\u011bny ve spr\u00e1vn\u00e9m po\u0159ad\u00ed. Tyto po\u017eadavky jsou spln\u011bny pro <i>Game State<\/i>. Ale proto\u017ee \u00fakol <i>Stav latency<\/i> je v tom, aby \"vypadal dostate\u010dn\u011b dob\u0159e\" pro hr\u00e1\u010de, nejsou v stavu latenc\u00ed spln\u011bny. <i>Latency State<\/i> nezohled\u0148uje <noindex><a rel=\"nofollow\" href=\"https:\/\/cdn.factorio.com\/assets\/img\/blog\/fff-302-megapacket-commit.jpg\">mnoho okrajov\u00fdch p\u0159\u00edpad\u016f<\/a><\/noindex>, souvisej\u00edc\u00edch s vynech\u00e1n\u00edm takt\u016f a zm\u011bnou latence p\u0159i p\u0159enosu tam a zp\u011bt.<\/p>\n<p>U\u017e si mo\u017en\u00e1 dok\u00e1\u017eete p\u0159edstavit, kam to sm\u011b\u0159uje. Kone\u010dn\u011b za\u010d\u00edn\u00e1me vid\u011bt p\u0159\u00ed\u010diny probl\u00e9mu megabal\u00edku. Ko\u0159en probl\u00e9mu spo\u010d\u00edv\u00e1 v tom, \u017ee p\u0159i rozhodov\u00e1n\u00ed o tom, zda m\u00e1 b\u00fdt p\u0159enesena akce zm\u011bny v\u00fdb\u011bru, logika v\u00fdb\u011bru entit z\u00e1vis\u00ed na <i>Latency State<\/i>, a tento stav neobsahuje v\u017edy spr\u00e1vn\u00e9 informace. Proto je megabal\u00edk generov\u00e1n p\u0159ibli\u017en\u011b takto:<\/p>\n<ol>\n<li>Hr\u00e1\u010d m\u00e1 probl\u00e9my s p\u0159ipojen\u00edm.<\/li>\n<li>Do hry vstupuj\u00ed mechanismy vynech\u00e1v\u00e1n\u00ed takt\u016f a regulace latence p\u0159i p\u0159enosu tam a zp\u011bt.<\/li>\n<li>Fronta stav\u016f latenc\u00ed nezohled\u0148uje tyto mechanismy. To vede k tomu, \u017ee n\u011bkter\u00e9 akce jsou p\u0159ed\u010dasn\u011b odstran\u011bny nebo provedeny v nespr\u00e1vn\u00e9m po\u0159ad\u00ed, co\u017e m\u00e1 za n\u00e1sledek nespr\u00e1vn\u00e9 <i>Latency State<\/i>.<\/li>\n<li>Hr\u00e1\u010d m\u00e1 probl\u00e9m s p\u0159ipojen\u00edm a p\u0159izp\u016fsobuje se serveru, simuluje a\u017e 400 takt\u016f.<\/li>\n<li>V ka\u017ed\u00e9m taktu je generov\u00e1na a p\u0159ipravov\u00e1na k odesl\u00e1n\u00ed na server nov\u00e1 akce zm\u011bny v\u00fdb\u011bru entity.<\/li>\n<li>Klient odes\u00edl\u00e1 serveru megabal\u00edk s v\u00edce ne\u017e 400 zm\u011bnami v\u00fdb\u011bru entit (a s dal\u0161\u00edmi akcemi: stav st\u0159elby, ch\u016fze atd. tak\u00e9 trp\u011bly t\u00edmto probl\u00e9mem).<\/li>\n<li>Server p\u0159ij\u00edm\u00e1 400 vstupn\u00edch akc\u00ed. Jeliko\u017e mu nen\u00ed dovoleno opustit ani jednu vstupn\u00ed akci, na\u0159izuje v\u0161em klient\u016fm, aby tyto akce provedli a odeslali je po s\u00edti.<\/li>\n<\/ol>\n<p>\nIronie spo\u010d\u00edv\u00e1 v tom, \u017ee mechanismus ur\u010den\u00fd k \u00faspo\u0159e \u0161\u00ed\u0159ky p\u00e1sma kan\u00e1lu ve skute\u010dnosti vytv\u00e1\u0159el obrovsk\u00e9 s\u00ed\u0165ov\u00e9 pakety.<\/p>\n<p>Tento probl\u00e9m jsme vy\u0159e\u0161ili opravou v\u0161ech okrajov\u00fdch p\u0159\u00edpad\u016f aktualizace a podpory fronty zpo\u017ed\u011bn\u00ed. A\u010dkoli to trvalo pom\u011brn\u011b dlouho, nakonec st\u00e1lo za to to spr\u00e1vn\u011b implementovat, m\u00edsto abychom se spolehli na rychl\u00e9 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\/cs\/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=\"cs_CZ\" \/>\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\/cs\/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\udd47Megabal\u00ed\u010dek: jak v\u00fdvoj\u00e1\u0159\u016fm Factorio poda\u0159ilo vy\u0159e\u0161it probl\u00e9m s multiplayerem pro 200 hr\u00e1\u010d\u016f | ProHoster","description":".","canonical_url":"https:\/\/prohoster.info\/cs\/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":"cs_CZ","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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/37812","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=37812"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/37812\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/28381"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=37812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=37812"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=37812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}