{"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\/sv\/blog\/administrirovanie\/megapaket-kak-razrabotchikam-factorio-udalos-reshit-problemu-s-multipleerom-na-200-igrokov","title":{"rendered":"Megapaket: Hur utvecklarna av Factorio lyckades l\u00f6sa problemet med multiplayer f\u00f6r 200 spelare","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Megapaket: Hur utvecklarna av Factorio lyckades l\u00f6sa problemet med multiplayer f\u00f6r 200 spelare\" src=\"\/wp-content\/uploads\/2019\/09\/135544365299791de479555734645ef2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nI maj m\u00e5nad deltog jag som spelare i <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/d_DlvkTK9hU\">MMO-evenemanget KatherineOfSky<\/a><\/noindex>. Jag m\u00e4rkte att n\u00e4r antalet spelare n\u00e5r ett visst antal, s\u00e5 kopplar en del av dem \"bort\" var n\u00e5gra minuter. Lyckligtvis f\u00f6r er (men inte f\u00f6r mig) var jag en av de spelare som kopplades bort <b>varje g\u00e5ng<\/b>, trots att jag hade en bra uppkoppling. Jag tog detta som en personlig utmaning och b\u00f6rjade leta efter orsaken till problemet. Efter tre veckors fels\u00f6kning, testning och reparationer var felet \u00e4ntligen \u00e5tg\u00e4rdat, men denna resa var inte s\u00e5 enkel.<\/p>\n<p>Problem i multiplayer-spel \u00e4r v\u00e4ldigt sv\u00e5ra att sp\u00e5ra. De uppst\u00e5r vanligtvis under mycket specifika f\u00f6rh\u00e5llanden i n\u00e4tverksinst\u00e4llningar och under v\u00e4ldigt specifika spelsituationer (i det h\u00e4r fallet \u2013 mer \u00e4n 200 spelare). Och \u00e4ven n\u00e4r man lyckas \u00e5terskapa problemet kan det vara om\u00f6jligt att debugga det ordentligt, eftersom ins\u00e4ttning av kontrollpunkter stoppar spelet, f\u00f6rvirrar tidtagarna och vanligtvis leder till att anslutningen avslutas p\u00e5 grund av tids\u00f6verskridning. Men tack vare ih\u00e4rdighet och ett fantastiskt verktyg som heter <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jagt\/clumsy\">clumsy<\/a><\/noindex> , lyckades jag lista ut vad som h\u00e4nde.<\/p>\n<p>Kort sagt: p\u00e5 grund av ett fel och ofullst\u00e4ndig implementering av simuleringsf\u00f6rh\u00e5llandet f\u00f6r f\u00f6rdr\u00f6jning hamnade klienten ibland i en situation d\u00e4r den m\u00e5ste skicka ett n\u00e4tverkspaket best\u00e5ende av spelarinmatningar som involverar cirka 400 spelstruktur (vi kallar det \"megapaket\"). Efter detta m\u00e5ste servern inte bara ta emot alla dessa inmatningar korrekt, utan ocks\u00e5 skicka dem till alla andra klienter. Om du har 200 klienter blir detta snabbt ett problem. Kanalen till servern blir snabbt \u00f6verfull, vilket leder till paketf\u00f6rlust och en kaskad av beg\u00e4rda paket p\u00e5 nytt. F\u00f6rdr\u00f6jningen av inmatningar leder sedan till att \u00e4nnu fler klienter b\u00f6rjar skicka megapaket, och deras lavin blir \u00e4nnu starkare. Lyckas kunderna \u00e5terh\u00e4mta sig g\u00e5r alla andra \"bort\".<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<img decoding=\"async\" alt=\"Megapaket: Hur utvecklarna av Factorio lyckades l\u00f6sa problemet med multiplayer f\u00f6r 200 spelare\" src=\"\/wp-content\/uploads\/2019\/09\/ff1a60d55eb6f5a4dc7be4b826d747f0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nProblemet var ganska grundl\u00e4ggande och jag tog tv\u00e5 veckor f\u00f6r att \u00e5tg\u00e4rda det. Det \u00e4r ganska tekniskt, s\u00e5 nedan kommer jag att f\u00f6rklara detaljerna. Men f\u00f6rst beh\u00f6ver du veta att med version 0.17.54 som sl\u00e4pptes den 4 juni, har multiplayer blivit mer stabilt under tidsproblem med anslutning, och f\u00f6rdr\u00f6jningsdoldning \u00e4r mycket mindre glitchigt (mindre lagg och teleportering). Dessutom har jag \u00e4ndrat s\u00e4ttet att d\u00f6lja f\u00f6rdr\u00f6jningar i strid och hoppas att de kommer att vara lite mer smidiga.<\/p>\n<h3>Multiplayer Megapaket \u2013 tekniska detaljer<\/h3>\n<p>\nF\u00f6renklat kan man s\u00e4ga att multiplayer i spelet fungerar s\u00e5 h\u00e4r: alla klienter simulerar spelets tillst\u00e5nd, genom att ta emot och skicka endast spelarens inmatning (kallas \"inmatnings\u00e5tg\u00e4rder\", <i>Input Actions<\/i>). Huvuduppgiften f\u00f6r servern \u00e4r att \u00f6verf\u00f6ra <i>Input Actions<\/i> och kontrollera att alla klienter utf\u00f6r samma \u00e5tg\u00e4rder under ett taktslag. Mer om detta kan du l\u00e4sa i inl\u00e4gget <noindex><a rel=\"nofollow\" href=\"https:\/\/www.factorio.com\/blog\/post\/fff-149\">FFF-149<\/a><\/noindex>.<\/p>\n<p>Eftersom servern m\u00e5ste fatta beslut om vilka \u00e5tg\u00e4rder som ska utf\u00f6ras, r\u00f6r sig spelarens \u00e5tg\u00e4rd ungef\u00e4r enligt denna v\u00e4g: spelarens \u00e5tg\u00e4rd -&gt; spelklienten -&gt; n\u00e4tverk -&gt; server -&gt; n\u00e4tverk -&gt; spelklienten. Det betyder att varje spelar\u00e5tg\u00e4rd utf\u00f6rs f\u00f6rst efter att den har gjort resan fram och tillbaka genom n\u00e4tverket. P\u00e5 grund av detta skulle spelet verka fruktansv\u00e4rt laggigt, s\u00e5 n\u00e4stan omedelbart efter att multiplayer introducerades i spelet, implementerades en mekanism f\u00f6r att d\u00f6lja f\u00f6rdr\u00f6jningar. D\u00f6d f\u00f6rdr\u00f6jning simulerar spelarens inmatning utan att ta h\u00e4nsyn till andra spelares \u00e5tg\u00e4rder eller serverns beslut.<\/p>\n<p><img decoding=\"async\" alt=\"Megapaket: Hur utvecklarna av Factorio lyckades l\u00f6sa problemet med multiplayer f\u00f6r 200 spelare\" src=\"\/wp-content\/uploads\/2019\/09\/0b66a3b07d6aa2ab1d2329d782c78615.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nI Factorio finns det ett speltilst\u00e5nd <i>Game State<\/i> \u2013 det fullst\u00e4ndiga tillst\u00e5ndet av kartan, spelaren, enheterna och allt annat. Det simuleras deterministiskt i alla klienter baserat p\u00e5 \u00e5tg\u00e4rder som tas emot fr\u00e5n servern. Spelst\u00e5ndet \u00e4r heligt, och om det n\u00e5gonsin b\u00f6rjar skilja sig fr\u00e5n servern eller n\u00e5gon annan klient uppst\u00e5r det en desynkronisering.<\/p>\n<p>F\u00f6rutom <i>Game State<\/i> har vi ett f\u00f6rdr\u00f6jnings tillst\u00e5nd <i>Latency State<\/i>. Det inneh\u00e5ller en liten delm\u00e4ngd av det grundl\u00e4ggande tillst\u00e5ndet. <i>Latency State<\/i> det \u00e4r inte heligt och representerar helt enkelt en bild av hur spelets tillst\u00e5nd kommer att se ut i framtiden baserat p\u00e5 spelarens inmatningar. <i>Input Actions<\/i>.<\/p>\n<p>F\u00f6r detta lagrar vi en kopia av skapade <i>Input Actions<\/i> i f\u00f6rdr\u00f6jningsk\u00f6n.<\/p>\n<p><img decoding=\"async\" alt=\"Megapaket: Hur utvecklarna av Factorio lyckades l\u00f6sa problemet med multiplayer f\u00f6r 200 spelare\" src=\"\/wp-content\/uploads\/2019\/09\/31e43263d1d2bfc79700730978fcd02a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDet vill s\u00e4ga, i slutet av processen ser bilden p\u00e5 klientsidan ut ungef\u00e4r s\u00e5 h\u00e4r:<\/p>\n<ol>\n<li>Till\u00e4mpa <i>Input Actions<\/i> alla \u00e5tg\u00e4rder p\u00e5 <i>Game State<\/i> s\u00e5 som dessa indata har mottagits fr\u00e5n servern.<\/li>\n<li>Ta bort alla \u00e5tg\u00e4rder fr\u00e5n f\u00f6rdr\u00f6jningsk\u00f6n <i>Input Actions<\/i>, som enligt servern redan har till\u00e4mpats p\u00e5 <i>Game State<\/i>.<\/li>\n<li>Ta bort <i>Latency State<\/i> och \u00e5terst\u00e4ll det s\u00e5 att det ser exakt ut som <i>Game State<\/i>.<\/li>\n<li>Till\u00e4mpa alla \u00e5tg\u00e4rder fr\u00e5n f\u00f6rdr\u00f6jningsk\u00f6n p\u00e5 <i>Latency State<\/i>.<\/li>\n<li>Baserat p\u00e5 data <i>Game State<\/i> och <i>Latency State<\/i> renderar vi spelet f\u00f6r spelaren.<\/li>\n<\/ol>\n<p>\nAllt detta upprepas i varje takt.<\/p>\n<p>F\u00f6r sv\u00e5rt? Slappna av, det \u00e4r \u00e4nnu inte allt. F\u00f6r att kompensera f\u00f6r den op\u00e5litliga internetanslutningen har vi skapat tv\u00e5 mekanismer:<\/p>\n<ul>\n<li>Missade takter: n\u00e4r servern beslutar att <i>Input Actions<\/i> \u00e5tg\u00e4rder kommer att genomf\u00f6ras i speltakten, om den inte har f\u00e5tt <i>Input Actions<\/i> n\u00e5got fr\u00e5n en spelare (till exempel p\u00e5 grund av \u00f6kad f\u00f6rdr\u00f6jning), kommer den inte att v\u00e4nta, utan meddelar den klienten \"jag har inte tagit h\u00e4nsyn till dina <i>Input Actions<\/i>, jag ska f\u00f6rs\u00f6ka l\u00e4gga till dem i n\u00e4sta takt\". Detta g\u00f6rs f\u00f6r att s\u00e4kerst\u00e4lla att uppdateringen av kartan inte f\u00f6rdr\u00f6js f\u00f6r alla andra p\u00e5 grund av anslutningsproblem (eller en enskild spelares dator). Det \u00e4r v\u00e4rt att notera att <i>Input Actions<\/i> inte ignoreras, utan bara skjuts upp.<\/li>\n<li>Fullst\u00e4ndig tur-och-retur-f\u00f6rdr\u00f6jning: servern f\u00f6rs\u00f6ker f\u00f6ruts\u00e4ga vad f\u00f6rdr\u00f6jningen f\u00f6r data\u00f6verf\u00f6ring tur och retur mellan klienten och servern \u00e4r f\u00f6r varje klient. Var femte sekund diskuterar den vid behov en ny f\u00f6rdr\u00f6jning med klienten (beroende p\u00e5 hur anslutningen betett sig tidigare) och justerar tur-och-retur-f\u00f6rdr\u00f6jningen d\u00e4refter.<\/li>\n<\/ul>\n<p>\nSj\u00e4lva dessa mekanismer \u00e4r ganska enkla, men n\u00e4r de anv\u00e4nds tillsammans (vilket ofta h\u00e4nder vid anslutningsproblem) blir logiken i koden sv\u00e5rhanterlig med m\u00e5nga gr\u00e4nsfall. Dessutom, n\u00e4r dessa mekanismer \u00e4r inblandade, m\u00e5ste servern och f\u00f6rdr\u00f6jningsk\u00f6n korrekt implementera den speciella <i>Input Action<\/i> som kallas <i>StopMovementInTheNextTick<\/i>. Tack vare detta kommer karakt\u00e4ren inte att springa av sig sj\u00e4lv vid anslutningsproblem (till exempel under ett t\u00e5g).<\/p>\n<p>Nu m\u00e5ste jag f\u00f6rklara f\u00f6r dig hur enhetsvalet fungerar. En av de \u00f6verf\u00f6rda typerna <i>Input Action<\/i> \u2014 detta \u00e4r f\u00f6r\u00e4ndringen av tillst\u00e5ndet f\u00f6r entitetsval. Det informerar alla om vilken entitet spelaren har pekat p\u00e5 med musen. Som man kan f\u00f6rst\u00e5 \u00e4r detta en av de vanligaste inmatnings\u00e5tg\u00e4rderna som skickas av klienterna, d\u00e4rf\u00f6r har vi optimerat den s\u00e5 att den tar s\u00e5 lite bandbredd som m\u00f6jligt. Detta har genomf\u00f6rts p\u00e5 det s\u00e4ttet att vid val av varje entitet ist\u00e4llet f\u00f6r att spara absoluta, h\u00f6gprecisionskartkoordinater, sparar spelet l\u00e5gprecisions relativa f\u00f6rskjutningar fr\u00e5n den f\u00f6reg\u00e5ende valet. Detta fungerar bra eftersom musmarkeringen vanligtvis sker n\u00e4ra den tidigare markeringen. P\u00e5 grund av detta finns det tv\u00e5 viktiga krav: <i>Input Actions<\/i> f\u00e5r aldrig hoppas \u00f6ver och m\u00e5ste utf\u00f6ras i r\u00e4tt ordning. Dessa krav uppfylls f\u00f6r <i>Game State<\/i>. Men eftersom uppgiften <i>Latency state<\/i> \u00e4r att \"se tillr\u00e4ckligt bra ut\" f\u00f6r spelaren, uppfylls de inte i latensl\u00e4get. <i>Latency State<\/i> tar inte h\u00e4nsyn till <noindex><a rel=\"nofollow\" href=\"https:\/\/cdn.factorio.com\/assets\/img\/blog\/fff-302-megapacket-commit.jpg\">m\u00e5nga gr\u00e4nsfall<\/a><\/noindex>, relaterade till takthopp och f\u00f6r\u00e4ndringar i tv\u00e5v\u00e4gs latens.<\/p>\n<p>Du kan redan gissa vart det h\u00e4r leder. \u00c4ntligen b\u00f6rjar vi se orsakerna till megapaketproblemet. Roten till problemet ligger i att beslutslogiken om huruvida \u00e5tg\u00e4rden f\u00f6r att f\u00f6r\u00e4ndra valet ska \u00f6verf\u00f6ras, \u00e4r beroende av <i>Latency State<\/i>, och detta tillst\u00e5nd inneh\u00e5ller inte alltid korrekt information. D\u00e4rf\u00f6r genereras megapaketet p\u00e5 f\u00f6ljande s\u00e4tt:<\/p>\n<ol>\n<li>Spelaren har problem med anslutningen.<\/li>\n<li>Taktjump och justering av tv\u00e5v\u00e4gs latens kommer in i bilden.<\/li>\n<li>K\u00f6 av latensstatus tar inte h\u00e4nsyn till dessa mekanismer. Detta leder till att vissa \u00e5tg\u00e4rder tas bort f\u00f6r tidigt eller utf\u00f6rs i fel ordning, vilket resulterar i felaktig <i>Latency State<\/i>.<\/li>\n<li>Spelaren tappade anslutningen och simulerar upp till 400 takter f\u00f6r att hinna ikapp servern.<\/li>\n<li>Vid varje takt genereras och f\u00f6rbereds en ny \u00e5tg\u00e4rd f\u00f6r att f\u00f6r\u00e4ndra entitetsvalet f\u00f6r att skickas till servern.<\/li>\n<li>Klienten skickar ett megapaket med \u00f6ver 400 f\u00f6r\u00e4ndringar av entitetsval (och andra \u00e5tg\u00e4rder: tillst\u00e5ndet f\u00f6r skjutande, g\u00e5ng osv. led ocks\u00e5 av detta problem).<\/li>\n<li>Servern f\u00e5r 400 inmatnings\u00e5tg\u00e4rder. Eftersom den inte har till\u00e5telse att hoppa \u00f6ver en enda \u00e5tg\u00e4rd beordrar den alla klienter att utf\u00f6ra dessa \u00e5tg\u00e4rder och skickar dem \u00f6ver n\u00e4tverket.<\/li>\n<\/ol>\n<p>\nIronin \u00e4r att mekanismen som \u00e4r avsedd att spara bandbredd i kanalen ist\u00e4llet skapade enorma n\u00e4tverkspaket.<\/p>\n<p>Vi l\u00f6ste detta problem genom att \u00e5tg\u00e4rda alla gr\u00e4nsfall f\u00f6r uppdatering och hantering av f\u00f6rdr\u00f6jningsk\u00f6er. \u00c4ven om det tog ganska l\u00e5ng tid var det v\u00e4rt att genomf\u00f6ra allt korrekt ist\u00e4llet f\u00f6r att f\u00f6rlita sig p\u00e5 snabba l\u00f6sningar.<br \/>\n<br \/>K\u00e4lla: <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.4 - 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\/sv\/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.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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\udd47Megapaket: hur utvecklarna av Factorio lyckades l\u00f6sa problemet med flerspelarl\u00e4ge f\u00f6r 200 spelare | ProHoster","description":".","canonical_url":"https:\/\/prohoster.info\/sv\/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":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/37812","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=37812"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/37812\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/28381"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=37812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=37812"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=37812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}