{"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\/hu\/blog\/administrirovanie\/megapaket-kak-razrabotchikam-factorio-udalos-reshit-problemu-s-multipleerom-na-200-igrokov","title":{"rendered":"Meglep\u0151 csomag: hogyan siker\u00fclt a Factorio fejleszt\u0151inek megoldani a 200 j\u00e1t\u00e9kosra vonatkoz\u00f3 multiplayer probl\u00e9m\u00e1t","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Meglep\u0151 csomag: hogyan siker\u00fclt a Factorio fejleszt\u0151inek megoldani a 200 j\u00e1t\u00e9kosra vonatkoz\u00f3 multiplayer probl\u00e9m\u00e1t\" src=\"\/wp-content\/uploads\/2019\/09\/135544365299791de479555734645ef2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nId\u00e9n m\u00e1jusban r\u00e9szt vettem <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/d_DlvkTK9hU\">a KatherineOfSky MMO esem\u00e9nyen.<\/a><\/noindex>\u00c9szrevettem, hogy amikor a j\u00e1t\u00e9kosok sz\u00e1ma el\u00e9ri a bizonyos szintet, n\u00e9h\u00e1ny percenk\u00e9nt egy r\u00e9sz\u00fck \"lecsatlakozik\". Szerencs\u00e9re (de nem sz\u00e1momra) \u00e9n is azok k\u00f6z\u00e9 tartoztam, akik lecsatlakoztak <b>minden alkalommal<\/b>, m\u00e9g egy j\u00f3 kapcsolat mellett is. Ezt szem\u00e9lyes kih\u00edv\u00e1snak tekintettem, \u00e9s elkezdtem keresni a probl\u00e9ma okait. H\u00e1rom h\u00e9t hibakeres\u00e9s, tesztel\u00e9s \u00e9s jav\u00edt\u00e1s ut\u00e1n v\u00e9gre siker\u00fclt megoldani a hib\u00e1t, de ez az \u00fat nem volt olyan egyszer\u0171.<\/p>\n<p>A multiplayer j\u00e1t\u00e9kok probl\u00e9m\u00e1it nagyon neh\u00e9z nyomon k\u00f6vetni. \u00c1ltal\u00e1ban nagyon specifikus h\u00e1l\u00f3zati be\u00e1ll\u00edt\u00e1sokkal \u00e9s j\u00e1t\u00e9k\u00e1llapotokkal (ebben az esetben t\u00f6bb mint 200 j\u00e1t\u00e9kos jelenl\u00e9te) fordulnak el\u0151. \u00c9s m\u00e9g ha siker\u00fcl is reproduk\u00e1lni a probl\u00e9m\u00e1t, azt megfelel\u0151en hibakeresni lehetetlen, mert a ellen\u0151rz\u0151 pontok beilleszt\u00e9se le\u00e1ll\u00edtja a j\u00e1t\u00e9kot, zavarja az id\u0151z\u00edt\u00e9seket \u00e9s \u00e1ltal\u00e1ban kapcsolatmegszak\u00edt\u00e1shoz vezet a v\u00e1rakoz\u00e1si id\u0151 t\u00fall\u00e9p\u00e9se miatt. De a kitart\u00e1somnak \u00e9s egy nagyszer\u0171 eszk\u00f6znek, a <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jagt\/clumsy\">clumsy<\/a><\/noindex> k\u00f6sz\u00f6nhet\u0151en siker\u00fclt kider\u00edtenem, mi t\u00f6rt\u00e9nik.<\/p>\n<p>R\u00f6viden: a hiba \u00e9s a szimul\u00e1ci\u00f3s k\u00e9sleltet\u00e9s hi\u00e1nyos megval\u00f3s\u00edt\u00e1sa miatt a kliens id\u0151nk\u00e9nt olyan helyzetbe ker\u00fclt, hogy egyetlen l\u00e9p\u00e9sben egy h\u00e1l\u00f3zati csomagot kellett k\u00fcldenie, amely k\u00f6r\u00fclbel\u00fcl 400 j\u00e1t\u00e9kos \u00e1ltal v\u00e9grehajtott v\u00e1laszt\u00e1si akci\u00f3t tartalmazott (ezt h\u00edvjuk \u201emegacsomagnak\u201d). Ezt k\u00f6vet\u0151en a szervernek nemcsak az \u00f6sszes bemeneti akci\u00f3t helyesen kell megkapnia, hanem azokat minden m\u00e1s kliensnek is el kell k\u00fcldenie. Ha 200 kliens van, ez gyorsan probl\u00e9m\u00e1v\u00e1 v\u00e1lik. A szerverhez vezet\u0151 csatorna gyorsan elakad, ami csomagok elveszt\u00e9s\u00e9hez \u00e9s ism\u00e9telt k\u00e9r\u00e9sek l\u00e1ncolat\u00e1hoz vezet. A bemeneti akci\u00f3k k\u00e9sleked\u00e9se pedig arra \u00f6szt\u00f6n\u00f6z m\u00e9g t\u00f6bb klienst, hogy megacsomagokat k\u00fcldj\u00f6n, \u00e9s az \u00e1radata egyre er\u0151sebb\u00e9 v\u00e1lik. A szerencs\u00e9s kliensek vissza tudnak \u00e1llni, m\u00edg a t\u00f6bbiek \"lecsatlakoznak\".<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<img decoding=\"async\" alt=\"Meglep\u0151 csomag: hogyan siker\u00fclt a Factorio fejleszt\u0151inek megoldani a 200 j\u00e1t\u00e9kosra vonatkoz\u00f3 multiplayer probl\u00e9m\u00e1t\" src=\"\/wp-content\/uploads\/2019\/09\/ff1a60d55eb6f5a4dc7be4b826d747f0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nA probl\u00e9ma el\u00e9gg\u00e9 alapvet\u0151 volt, \u00e9s k\u00e9t h\u00e9tig tartott a megold\u00e1sa. Nagyon technikai, ez\u00e9rt al\u00e1bb r\u00e9szletesen kifejtem a technikai r\u00e9szleteket. De el\u0151sz\u00f6r is tudnia kell, hogy a 0.17.54-es verzi\u00f3 megjelen\u00e9se \u00f3ta, j\u00fanius 4-\u00e9n, a t\u00f6bbj\u00e1t\u00e9kos m\u00f3d sokkal stabilabb\u00e1 v\u00e1lt, \u00e9s a k\u00e9sleltet\u00e9sek elrejt\u00e9se sokkal kev\u00e9sb\u00e9 akadozik (kevesebb k\u00e9sleked\u00e9s \u00e9s teleport\u00e1l\u00e1s). Ezenk\u00edv\u00fcl megv\u00e1ltoztattam a k\u00e9sleltet\u00e9sek elrejt\u00e9s\u00e9nek m\u00f3dj\u00e1t a harcban, \u00e9s rem\u00e9lem, hogy ez\u00e1ltal kiss\u00e9 sim\u00e1bb\u00e1 v\u00e1lnak.<\/p>\n<h3>T\u00f6bbj\u00e1t\u00e9kos megak\u00e9szlet \u2013 technikai r\u00e9szletek<\/h3>\n<p>\nEgyszer\u0171s\u00edtve elmagyar\u00e1zva, a j\u00e1t\u00e9k t\u00f6bbj\u00e1t\u00e9kos m\u00f3dja a k\u00f6vetkez\u0151k\u00e9ppen m\u0171k\u00f6dik: minden kliens szimul\u00e1lja a j\u00e1t\u00e9k \u00e1llapot\u00e1t, csak a j\u00e1t\u00e9kosok bemenet\u00e9t (\u00fagynevezett \"bemendi akci\u00f3k\") fogadva \u00e9s k\u00fcldve. <i>Input Actions<\/i>. A szerver f\u0151 feladata az, hogy <i>Input Actions<\/i> ellen\u0151rizze \u00e9s vez\u00e9relje, hogy minden kliens ugyanazokat a cselekv\u00e9seket hajtsa v\u00e9gre egy menetben. Err\u0151l t\u00f6bbet olvashat a <noindex><a rel=\"nofollow\" href=\"https:\/\/www.factorio.com\/blog\/post\/fff-149\">FFF-149<\/a><\/noindex>.<\/p>\n<p>bejegyz\u00e9sben. Mivel a szervernek d\u00f6ntenie kell, hogy milyen akci\u00f3kat kell v\u00e9grehajtani, a j\u00e1t\u00e9kos cselekv\u00e9sek k\u00f6r\u00fclbel\u00fcl a k\u00f6vetkez\u0151 \u00faton haladnak: j\u00e1t\u00e9kos akci\u00f3 -&gt; j\u00e1t\u00e9k kliens -&gt; h\u00e1l\u00f3zat -&gt; szerver -&gt; h\u00e1l\u00f3zat -&gt; j\u00e1t\u00e9k kliens. Ez azt jelenti, hogy minden j\u00e1t\u00e9kos akci\u00f3 csak akkor hajthat\u00f3 v\u00e9gre, miut\u00e1n az oda-vissza megtette az utat a h\u00e1l\u00f3zaton. Emiatt a j\u00e1t\u00e9k rettenetesen akadoz\u00f3nak t\u0171nne, ez\u00e9rt majdnem azonnal a t\u00f6bbj\u00e1t\u00e9kos megjelen\u00e9se ut\u00e1n bevezett\u00e9k a k\u00e9sleltet\u00e9sek elrejt\u00e9s\u00e9nek mechanizmus\u00e1t. A k\u00e9sleltet\u00e9sek elrejt\u00e9se szimul\u00e1lja a j\u00e1t\u00e9kos bemenet\u00e9t an\u00e9lk\u00fcl, hogy figyelembe venn\u00e9 m\u00e1s j\u00e1t\u00e9kosok akci\u00f3it \u00e9s a szerver d\u00f6nt\u00e9seit.<\/p>\n<p><img decoding=\"async\" alt=\"Meglep\u0151 csomag: hogyan siker\u00fclt a Factorio fejleszt\u0151inek megoldani a 200 j\u00e1t\u00e9kosra vonatkoz\u00f3 multiplayer probl\u00e9m\u00e1t\" src=\"\/wp-content\/uploads\/2019\/09\/0b66a3b07d6aa2ab1d2329d782c78615.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nA Factori\u00f3ban van egy j\u00e1t\u00e9knak nevezett \u00e1llapot <i>Game State<\/i> \u2013 ez a teljes t\u00e9rk\u00e9p, j\u00e1t\u00e9kos, entit\u00e1sok \u00e9s minden egy\u00e9b \u00e1llapota. Ez determinisztikusan van szimul\u00e1lva minden kliensben a szervert\u0151l kapott akci\u00f3k alapj\u00e1n. A j\u00e1t\u00e9knak ez az \u00e1llapota szent, \u00e9s ha valaha elt\u00e9r a szervert\u0151l vagy b\u00e1rmely m\u00e1s kliens \u00e1llapot\u00e1t\u00f3l, deszinkroniz\u00e1ci\u00f3 l\u00e9p fel.<\/p>\n<p>Ezen k\u00edv\u00fcl <i>Game State<\/i> Van nek\u00fcnk egy k\u00e9sleltet\u00e9s \u00e1llapotunk <i>Latency State<\/i>. Ez tartalmaz egy kis r\u00e9szhalmazt a f\u0151 \u00e1llapotb\u00f3l. <i>Latency State<\/i> Nem szent, \u00e9s csak egy k\u00e9pet mutat arr\u00f3l, hogy n\u00e9z ki a j\u00e1t\u00e9k \u00e1llapota a j\u00f6v\u0151ben a j\u00e1t\u00e9kos \u00e1ltal bevitt adatok alapj\u00e1n. <i>Input Actions<\/i>.<\/p>\n<p>Ehhez meg\u0151rz\u00fcnk egy p\u00e9ld\u00e1nyt a l\u00e9trehozott <i>Input Actions<\/i> k\u00e9sleltet\u00e9si sorban.<\/p>\n<p><img decoding=\"async\" alt=\"Meglep\u0151 csomag: hogyan siker\u00fclt a Factorio fejleszt\u0151inek megoldani a 200 j\u00e1t\u00e9kosra vonatkoz\u00f3 multiplayer probl\u00e9m\u00e1t\" src=\"\/wp-content\/uploads\/2019\/09\/31e43263d1d2bfc79700730978fcd02a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTeh\u00e1t a folyamat v\u00e9g\u00e9n az \u00fcgyf\u00e9l oldal\u00e1n \u00edgy n\u00e9z ki a helyzet:<\/p>\n<ol>\n<li>Alkalmazzuk <i>Input Actions<\/i> minden j\u00e1t\u00e9kost a <i>Game State<\/i> \u00edgy, ahogyan ezek a bemeneti m\u0171veletek az internetr\u0151l \u00e9rkeztek.<\/li>\n<li>Elt\u00e1vol\u00edtjuk a k\u00e9sleltet\u00e9si sorb\u00f3l az \u00f6sszes <i>Input Actions<\/i>, amelyeket a szerver adatai szerint m\u00e1r alkalmaztak a <i>Game State<\/i>.<\/li>\n<li>Elt\u00e1vol\u00edtjuk <i>Latency State<\/i> \u00e9s vissza\u00e1ll\u00edtjuk, hogy pontosan \u00fagy n\u00e9zzen ki, mint a <i>Game State<\/i>.<\/li>\n<li>Alkalmazzuk az \u00f6sszes m\u0171veletet a k\u00e9sleltet\u00e9si sorb\u00f3l a <i>Latency State<\/i>.<\/li>\n<li>A rendelkez\u00e9sre \u00e1ll\u00f3 adatok alapj\u00e1n <i>Game State<\/i> \u00e9s <i>Latency State<\/i> k\u00e9pzelj\u00fck el a j\u00e1t\u00e9kot a j\u00e1t\u00e9kos sz\u00e1m\u00e1ra.<\/li>\n<\/ol>\n<p>\nEz mindegyik \u00fctemben megism\u00e9tl\u0151dik.<\/p>\n<p>T\u00fal bonyolult? Ne laz\u00edtsanak, ez m\u00e9g nem minden. Az internet kapcsolatok megb\u00edzhatatlans\u00e1g\u00e1nak kompenz\u00e1l\u00e1s\u00e1ra k\u00e9t mechanizmust hoztunk l\u00e9tre:<\/p>\n<ul>\n<li>Kihagyott \u00fctemek: amikor a szerver \u00fagy d\u00f6nt, hogy <i>Input Actions<\/i> az \u00fctemben v\u00e9grehajt\u00e1sra ker\u00fclnek, ha nem kapott meg <i>Input Actions<\/i> egy j\u00e1t\u00e9kost (p\u00e9ld\u00e1ul a megn\u00f6vekedett k\u00e9sleltet\u00e9s miatt), akkor nem v\u00e1rakozik, hanem \u00e9rtes\u00edti az \u00fcgyfelet, hogy \u201enem vettem figyelembe a <i>Input Actions<\/i>, megpr\u00f3b\u00e1lom hozz\u00e1adni \u0151ket a k\u00f6vetkez\u0151 \u00fctemhez\u201d. Ez az\u00e9rt van, hogy egy j\u00e1t\u00e9kos kapcsolat\u00e1nak (vagy sz\u00e1m\u00edt\u00f3g\u00e9p\u00e9nek) probl\u00e9m\u00e1i miatt a t\u00e9rk\u00e9p friss\u00edt\u00e9se ne lassuljon le az \u00f6sszes t\u00f6bbi sz\u00e1m\u00e1ra. \u00c9rdemes megjegyezni, hogy <i>Input Actions<\/i> nem ignor\u00e1l\u00e1sra ker\u00fclnek, hanem csak elhalaszt\u00e1sra.<\/li>\n<li>Teljes oda-vissza k\u00e9sleltet\u00e9s: a szerver pr\u00f3b\u00e1lja megj\u00f3solni, hogy mekkora a k\u00e9sleltet\u00e9s az adatok oda-vissza tov\u00e1bb\u00edt\u00e1s\u00e1ban az \u00fcgyf\u00e9l \u00e9s a szerver k\u00f6z\u00f6tt minden egyes j\u00e1t\u00e9kos sz\u00e1m\u00e1ra. \u00d6t m\u00e1sodpercenk\u00e9nt, sz\u00fcks\u00e9g eset\u00e9n, \u00faj k\u00e9sleltet\u00e9st besz\u00e9l meg az \u00fcgyf\u00e9llel (att\u00f3l f\u00fcgg\u0151en, hogy a kapcsolat hogyan viselkedett a m\u00faltban), \u00e9s ennek megfelel\u0151en n\u00f6veli vagy cs\u00f6kkenti az oda-vissza adat\u00e1tvitel k\u00e9sleltet\u00e9s\u00e9t.<\/li>\n<\/ul>\n<p>\nEzek a mechanizmusok \u00f6n\u00e1ll\u00f3an meglehet\u0151sen egyszer\u0171ek, de amikor egy\u00fctt haszn\u00e1lj\u00e1k \u0151ket (ami gyakran el\u0151fordul kapcsolati probl\u00e9m\u00e1k eset\u00e9n), a k\u00f3d logik\u00e1ja nehezen kezelhet\u0151v\u00e9 v\u00e1lik, sok hat\u00e1rhelyzettel. Ezenk\u00edv\u00fcl, amikor ezek a mechanizmusok bel\u00e9pnek a k\u00e9pbe, a szervernek \u00e9s a k\u00e9sleltet\u00e9si soroknak megfelel\u0151en kell implement\u00e1lniuk a k\u00fcl\u00f6nleges <i>Input Action<\/i> Nornir n\u00e9ven h\u00edvtak <i>StopMovementInTheNextTick<\/i>. Ennek k\u00f6sz\u00f6nhet\u0151en a kapcsolat probl\u00e9m\u00e1i eset\u00e9n a karakter nem fut \u00f6n\u00e1ll\u00f3an (p\u00e9ld\u00e1ul vonat al\u00e1).<\/p>\n<p>Most el kell magyar\u00e1znom, hogyan m\u0171k\u00f6dik az entit\u00e1sok kiv\u00e1laszt\u00e1sa. Az egyik \u00e1tvitt t\u00edpusr\u00f3l van sz\u00f3 <i>Input Action<\/i> \u2014 ez a kiv\u00e1lasztott entit\u00e1s \u00e1llapot\u00e1nak megv\u00e1ltoztat\u00e1sa. Ez jelzi mindenkinek, hogy a j\u00e1t\u00e9kos melyik entit\u00e1sra mutatott az eg\u00e9rrel. Ahogy l\u00e1that\u00f3, ez az egyik leggyakoribb beviteli m\u0171velet, amelyet az \u00fcgyfelek k\u00fcldenek, ez\u00e9rt a s\u00e1vsz\u00e9less\u00e9g meg\u0151rz\u00e9se \u00e9rdek\u00e9ben optimaliz\u00e1ltuk, hogy a lehet\u0151 legkevesebb helyet foglaljon el. Ezt \u00fagy val\u00f3s\u00edtottuk meg, hogy minden entit\u00e1s kiv\u00e1laszt\u00e1sakor, a pontos t\u00e9rk\u00e9pkoordin\u00e1t\u00e1k meg\u0151rz\u00e9se helyett, a j\u00e1t\u00e9k relat\u00edv eltol\u00e1s\u00e1t mentj\u00fck el az el\u0151z\u0151 v\u00e1laszt\u00e1shoz k\u00e9pest. Ez j\u00f3l m\u0171k\u00f6dik, mivel az eg\u00e9rrel t\u00f6rt\u00e9n\u0151 kijel\u00f6l\u00e9s \u00e1ltal\u00e1ban nagyon k\u00f6zel t\u00f6rt\u00e9nik az el\u0151z\u0151 kijel\u00f6l\u00e9shez. Ennek k\u00f6vetkezm\u00e9nyek\u00e9nt k\u00e9t fontos k\u00f6vetelm\u00e9ny mer\u00fcl fel: <i>Input Actions<\/i> soha nem hagyhat\u00f3 ki, \u00e9s b\u00e1rmilyen esetben a helyes sorrendben kell v\u00e9grehajtani. Ezek a k\u00f6vetelm\u00e9nyek teljes\u00fclnek <i>Game State<\/i>. De mivel a feladat <i>K\u00e9sleltet\u00e9si \u00e1llapot<\/i> abb\u00f3l \u00e1ll, hogy 'el\u00e9g j\u00f3nak' t\u0171nj\u00f6n a j\u00e1t\u00e9kos sz\u00e1m\u00e1ra, k\u00e9sleltet\u00e9s \u00e1llapot\u00e1ban ezek nem teljes\u00fclnek. <i>Latency State<\/i> nem veszi figyelembe <noindex><a rel=\"nofollow\" href=\"https:\/\/cdn.factorio.com\/assets\/img\/blog\/fff-302-megapacket-commit.jpg\">sok hat\u00e1rhelyzetet<\/a><\/noindex>, amelyek a ciklusok kihagy\u00e1s\u00e1val \u00e9s a k\u00e9tir\u00e1ny\u00fa k\u00e9sleltet\u00e9sek megv\u00e1ltoztat\u00e1s\u00e1val kapcsolatosak.<\/p>\n<p>M\u00e1r gyan\u00edthatod, hogy hova tart ez. V\u00e9gre kezdj\u00fck l\u00e1tni a megacsomagol\u00e1s probl\u00e9m\u00e1j\u00e1nak okait. A probl\u00e9ma gy\u00f6kere abban rejlik, hogy a kiv\u00e1laszt\u00e1s m\u00f3dos\u00edt\u00e1s\u00e1nak \u00e1tvitele sor\u00e1n a kiv\u00e1lasztott entit\u00e1sok logik\u00e1ja a <i>Latency State<\/i>, \u00e9s ez az \u00e1llapot nem mindig tartalmazza a helyes inform\u00e1ci\u00f3t. Ez\u00e9rt a megacsomagol\u00e1s k\u00f6r\u00fclbel\u00fcl \u00edgy gener\u00e1l\u00f3dik:<\/p>\n<ol>\n<li>A j\u00e1t\u00e9kosnak probl\u00e9m\u00e1i vannak a kapcsolattal.<\/li>\n<li>Bel\u00e9pnek a ciklusok kihagy\u00e1s\u00e1ra \u00e9s a k\u00e9tir\u00e1ny\u00fa k\u00e9sleltet\u00e9s szab\u00e1lyoz\u00e1s\u00e1ra vonatkoz\u00f3 mechanizmusok.<\/li>\n<li>A k\u00e9sleltet\u00e9si \u00e1llapot sor nem veszi figyelembe ezeket a mechanizmusokat. Ez oda vezet, hogy bizonyos m\u0171veletek id\u0151 el\u0151tt t\u00f6rl\u00e9sre ker\u00fclnek, vagy helytelen sorrendben v\u00e9grehajt\u00e1sra ker\u00fclnek, ami helytelen <i>Latency State<\/i>.<\/li>\n<li>A j\u00e1t\u00e9kosnak megsz\u0171nik a kapcsolati probl\u00e9m\u00e1ja, \u00e9s hogy behozza mag\u00e1t a szerverhez, ak\u00e1r 400 ciklust is szimul\u00e1l.<\/li>\n<li>Minden ciklusban \u00faj m\u0171velet, az entit\u00e1s kiv\u00e1laszt\u00e1si m\u00f3dos\u00edt\u00e1sa gener\u00e1l\u00f3dik \u00e9s el\u0151k\u00e9sz\u00fcl a szerverre t\u00f6rt\u00e9n\u0151 k\u00fcld\u00e9sre.<\/li>\n<li>Az \u00fcgyf\u00e9l t\u00f6bb mint 400 entit\u00e1sv\u00e1ltoztat\u00e1st (\u00e9s egy\u00e9b m\u0171veleteket, mint p\u00e9ld\u00e1ul a l\u00f6v\u00e9s, j\u00e1r\u00e1s stb. is \u00e9rintett volt ez a probl\u00e9ma) tartalmaz\u00f3 megacsomagot k\u00fcld a szervernek.<\/li>\n<li>A szerver 400 bemeneti m\u0171veletet kap. Mivel nem enged\u00e9lyezett egyetlen bemeneti m\u0171velet kihagy\u00e1sa sem, utas\u00edtja az \u00f6sszes \u00fcgyfelet, hogy v\u00e9gezze el ezeket a m\u0171veleteket \u00e9s k\u00fcldje el \u0151ket a h\u00e1l\u00f3zaton.<\/li>\n<\/ol>\n<p>\nA ir\u00f3nia abban rejlik, hogy a mechanizmus, amelyet a s\u00e1vsz\u00e9less\u00e9g megtakar\u00edt\u00e1s\u00e1ra sz\u00e1ntak, v\u00e9g\u00fcl hatalmas h\u00e1l\u00f3zati csomagokat gener\u00e1lt.<\/p>\n<p>Ezt a probl\u00e9m\u00e1t \u00fagy oldottuk meg, hogy jav\u00edtottuk az \u00f6sszes hat\u00e1rhelyzetet a friss\u00edt\u00e9sekben \u00e9s a k\u00e9sleltet\u00e9si sor t\u00e1mogat\u00e1s\u00e1ban. B\u00e1r ez el\u00e9gg\u00e9 id\u0151ig\u00e9nyes volt, v\u00e9g\u00fcl meg\u00e9rte, hogy mindent helyesen val\u00f3s\u00edtottunk meg, ahelyett, hogy gyors megold\u00e1sokra t\u00e1maszkodtunk volna.<br \/>\n<br \/>Forr\u00e1s: <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\/hu\/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=\"hu_HU\" \/>\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\/hu\/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\udd47Megapackage: hogyan siker\u00fclt a Factorio fejleszt\u0151inek megoldani a 200 f\u0151s t\u00f6bbszerepl\u0151s probl\u00e9ma | ProHoster","description":".","canonical_url":"https:\/\/prohoster.info\/hu\/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":"hu_HU","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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/37812","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=37812"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/37812\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/28381"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=37812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=37812"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=37812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}