{"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\/fr\/blog\/administrirovanie\/megapaket-kak-razrabotchikam-factorio-udalos-reshit-problemu-s-multipleerom-na-200-igrokov","title":{"rendered":"M\u00e9gapackage : comment les d\u00e9veloppeurs de Factorio ont r\u00e9ussi \u00e0 r\u00e9soudre le probl\u00e8me du multijoueur avec 200 joueurs","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"M\u00e9gapackage : comment les d\u00e9veloppeurs de Factorio ont r\u00e9ussi \u00e0 r\u00e9soudre le probl\u00e8me du multijoueur avec 200 joueurs\" src=\"\/wp-content\/uploads\/2019\/09\/135544365299791de479555734645ef2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEn mai de cette ann\u00e9e, j'ai particip\u00e9 en tant que joueur \u00e0 <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/d_DlvkTK9hU\">l'\u00e9v\u00e9nement MMO KatherineOfSky<\/a><\/noindex>. J'ai remarqu\u00e9 que lorsque le nombre de joueurs atteignait un certain seuil, une partie d'entre eux se \"d\u00e9connectait\" toutes les quelques minutes. H\u00e9las pour vous (mais pas pour moi), j'\u00e9tais l'un de ces joueurs qui se d\u00e9connectaient <b>\u00e0 chaque fois<\/b>, m\u00eame avec une bonne connexion. J'ai consid\u00e9r\u00e9 cela comme un d\u00e9fi personnel et j'ai commenc\u00e9 \u00e0 chercher les raisons du probl\u00e8me. Apr\u00e8s trois semaines de d\u00e9bogage, de tests et de corrections, l'erreur a enfin \u00e9t\u00e9 r\u00e9solue, mais ce voyage n'a pas \u00e9t\u00e9 si simple.<\/p>\n<p>Les probl\u00e8mes des jeux multijoueurs sont tr\u00e8s difficiles \u00e0 suivre. Ils surviennent g\u00e9n\u00e9ralement dans des conditions tr\u00e8s sp\u00e9cifiques de r\u00e9seau et dans des \u00e9tats de jeu tr\u00e8s particuliers (dans ce cas, la pr\u00e9sence de plus de 200 joueurs). Et m\u00eame lorsque l'on parvient \u00e0 reproduire le probl\u00e8me, il est impossible de le d\u00e9boguer correctement, car l'insertion de points de contr\u00f4le interrompt le jeu, perturbe les minuteries et entra\u00eene g\u00e9n\u00e9ralement la perte de connexion \u00e0 cause d'un d\u00e9passement de d\u00e9lai. Mais gr\u00e2ce \u00e0 la pers\u00e9v\u00e9rance et \u00e0 un outil remarquable appel\u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jagt\/clumsy\">clumsy<\/a><\/noindex> , j'ai r\u00e9ussi \u00e0 comprendre ce qui se passe.<\/p>\n<p>En r\u00e9sum\u00e9 : en raison d'une erreur et d'une mise en \u0153uvre incompl\u00e8te de la simulation de l'\u00e9tat de latence, le client se retrouvait parfois dans une situation o\u00f9 il devait envoyer, en un seul tour, un paquet r\u00e9seau contenant des actions de choix d'environ 400 entit\u00e9s de jeu (que nous appelons \"m\u00e9ga-paquet\"). Ensuite, le serveur ne devait pas seulement recevoir correctement toutes ces actions d'entr\u00e9e, mais aussi les transmettre \u00e0 tous les autres clients. Si vous avez 200 clients, cela devient rapidement probl\u00e9matique. Le canal vers le serveur se bloque rapidement, entra\u00eenant une perte de paquets et un cascade de paquets redemand\u00e9s. Le retard des actions d'entr\u00e9e conduit alors encore plus de clients \u00e0 envoyer des m\u00e9ga-paquets, et leur avalanche devient encore plus forte. Les clients chanceux parviennent \u00e0 se r\u00e9tablir, mais tous les autres \"se d\u00e9connectent\".<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<img decoding=\"async\" alt=\"M\u00e9gapackage : comment les d\u00e9veloppeurs de Factorio ont r\u00e9ussi \u00e0 r\u00e9soudre le probl\u00e8me du multijoueur avec 200 joueurs\" src=\"\/wp-content\/uploads\/2019\/09\/ff1a60d55eb6f5a4dc7be4b826d747f0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nLe probl\u00e8me \u00e9tait assez fondamental, et il m'a fallu deux semaines pour le r\u00e9soudre. C'est plut\u00f4t technique, donc je vais expliquer les d\u00e9tails techniques succulents ci-dessous. Mais d'abord, vous devez savoir qu'\u00e0 partir de la version 0.17.54, publi\u00e9e le 4 juin, le multijoueur est devenu plus stable en cas de probl\u00e8mes de connexion temporaires, et la dissimulation des d\u00e9lais est bien moins bugg\u00e9e (moins de ralentissements et de t\u00e9l\u00e9portations). De plus, j'ai modifi\u00e9 la mani\u00e8re de masquer les d\u00e9lais pendant le combat et j'esp\u00e8re qu'ils seront un peu plus fluides gr\u00e2ce \u00e0 cela.<\/p>\n<h3>M\u00e9ga pack multijoueur \u2014 d\u00e9tails techniques<\/h3>\n<p>\nPour expliquer de mani\u00e8re simplifi\u00e9e, le multijoueur dans le jeu fonctionne comme suit : tous les clients simulent l'\u00e9tat du jeu, recevant et envoyant uniquement les entr\u00e9es des joueurs (appel\u00e9es \u00ab actions d'entr\u00e9e \u00bb, <i>Input Actions<\/i>). La t\u00e2che principale du serveur est de transmettre <i>Input Actions<\/i> et de contr\u00f4ler que tous les clients effectuent les m\u00eames actions au m\u00eame tour. Vous pouvez en lire plus dans le post <noindex><a rel=\"nofollow\" href=\"https:\/\/www.factorio.com\/blog\/post\/fff-149\">FFF-149<\/a><\/noindex>.<\/p>\n<p>Comme le serveur doit prendre des d\u00e9cisions sur les actions \u00e0 effectuer, l'action du joueur suit \u00e0 peu pr\u00e8s ce chemin : action du joueur -&gt; client de jeu -&gt; r\u00e9seau -&gt; serveur -&gt; r\u00e9seau -&gt; client de jeu. Cela signifie que chaque action du joueur n'est effectu\u00e9e qu'apr\u00e8s avoir effectu\u00e9 un aller-retour par le r\u00e9seau. \u00c0 cause de cela, le jeu semblerait horriblement lent, donc presque imm\u00e9diatement apr\u00e8s l'introduction du multijoueur, un m\u00e9canisme de dissimulation des d\u00e9lais a \u00e9t\u00e9 mis en place. La dissimulation des d\u00e9lais imite l'entr\u00e9e du joueur ind\u00e9pendamment des actions des autres joueurs et des d\u00e9cisions du serveur.<\/p>\n<p><img decoding=\"async\" alt=\"M\u00e9gapackage : comment les d\u00e9veloppeurs de Factorio ont r\u00e9ussi \u00e0 r\u00e9soudre le probl\u00e8me du multijoueur avec 200 joueurs\" src=\"\/wp-content\/uploads\/2019\/09\/0b66a3b07d6aa2ab1d2329d782c78615.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDans Factorio, il existe un \u00e9tat de jeu <i>Game State<\/i> \u2014 c'est l'\u00e9tat complet de la carte, du joueur, des entit\u00e9s et de tout le reste. Il est d\u00e9termin\u00e9 et simul\u00e9 dans tous les clients sur la base des actions re\u00e7ues du serveur. L'\u00e9tat du jeu est sacr\u00e9, et s'il commence un jour \u00e0 diff\u00e9rer de celui du serveur ou de tout autre client, une d\u00e9synchronisation se produit.<\/p>\n<p>En outre <i>Game State<\/i> nous avons un \u00e9tat de latence <i>Latency State<\/i>. Il contient un petit sous-ensemble de l'\u00e9tat principal. <i>Latency State<\/i> il n'est pas sacr\u00e9 et repr\u00e9sente simplement une image de ce \u00e0 quoi ressemblera l'\u00e9tat du jeu \u00e0 l'avenir sur la base des entr\u00e9es du joueur <i>Input Actions<\/i>.<\/p>\n<p>Pour cela, nous conservons une copie des <i>Input Actions<\/i> dans la file d'attente des d\u00e9lais.<\/p>\n<p><img decoding=\"async\" alt=\"M\u00e9gapackage : comment les d\u00e9veloppeurs de Factorio ont r\u00e9ussi \u00e0 r\u00e9soudre le probl\u00e8me du multijoueur avec 200 joueurs\" src=\"\/wp-content\/uploads\/2019\/09\/31e43263d1d2bfc79700730978fcd02a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u00c0 la fin du processus, du c\u00f4t\u00e9 du client, l'image ressemble \u00e0 peu pr\u00e8s \u00e0 cela :<\/p>\n<ol>\n<li>Appliquons <i>Input Actions<\/i> \u00e0 tous les joueurs <i>Game State<\/i> de la mani\u00e8re dont ces actions d'entr\u00e9e ont \u00e9t\u00e9 re\u00e7ues du serveur.<\/li>\n<li>Nous supprimons de la file d'attente des d\u00e9lais tous les <i>Input Actions<\/i>, qui, selon les donn\u00e9es du serveur, ont d\u00e9j\u00e0 \u00e9t\u00e9 appliqu\u00e9s \u00e0 <i>Game State<\/i>.<\/li>\n<li>Nous supprimons <i>Latency State<\/i> et le r\u00e9initialisons pour qu'il ressemble exactement \u00e0 <i>Game State<\/i>.<\/li>\n<li>Nous appliquons toutes les actions de la file d'attente des d\u00e9lais \u00e0 <i>Latency State<\/i>.<\/li>\n<li>Sur la base des donn\u00e9es <i>Game State<\/i> et <i>Latency State<\/i> nous rendons le jeu au joueur.<\/li>\n<\/ol>\n<p>\nTout cela se r\u00e9p\u00e8te \u00e0 chaque tick.<\/p>\n<p>Trop compliqu\u00e9 ? Ne vous d\u00e9tendez pas, ce n'est pas tout. Pour compenser l'instabilit\u00e9 des connexions Internet, nous avons cr\u00e9\u00e9 deux m\u00e9canismes :<\/p>\n<ul>\n<li>Ticks manqu\u00e9s : lorsque le serveur d\u00e9cide que <i>Input Actions<\/i> seront ex\u00e9cut\u00e9s dans le tick du jeu, si jamais il n'a pas re\u00e7u <i>Input Actions<\/i> d'un joueur (par exemple, en raison d'une augmentation de la latence), il ne va pas attendre, mais informera ce client \u00ab je n'ai pas pris en compte tes <i>Input Actions<\/i>, j'essaierai de les ajouter au prochain tick \u00bb. Cela est fait pour que la mise \u00e0 jour de la carte ne soit pas retard\u00e9e pour tous les autres \u00e0 cause des probl\u00e8mes de connexion (ou d'ordinateur) d'un seul joueur. Il convient de noter que <i>Input Actions<\/i> ne sont pas ignor\u00e9s, mais simplement report\u00e9s.<\/li>\n<li>La latence du trajet aller-retour complet : le serveur essaie de deviner quelle est la latence de transfert des donn\u00e9es aller-retour entre le client et le serveur pour chaque client. Toutes les 5 secondes, il discute avec le client d'une nouvelle latence si n\u00e9cessaire (en fonction de la fa\u00e7on dont la connexion a fonctionn\u00e9 dans le pass\u00e9), et ajuste en cons\u00e9quence la latence de transfert de donn\u00e9es aller-retour.<\/li>\n<\/ul>\n<p>\nCes m\u00e9canismes en eux-m\u00eames sont assez simples, mais lorsqu'ils sont utilis\u00e9s ensemble (ce qui se produit souvent en cas de probl\u00e8mes de connexion), la logique du code devient difficile \u00e0 g\u00e9rer avec de nombreux cas particuliers. De plus, lorsque ces m\u00e9canismes entrent en jeu, le serveur et la file d'attente des d\u00e9lais doivent correctement implanter une <i>Input Action<\/i> appel\u00e9 <i>StopMovementInTheNextTick<\/i>. Gr\u00e2ce \u00e0 cela, en cas de probl\u00e8me de connexion, le personnage ne se mettra pas \u00e0 courir tout seul (par exemple, sous un train).<\/p>\n<p>Maintenant, il faut vous expliquer comment fonctionne la s\u00e9lection des entit\u00e9s. Un des types transmis <i>Input Action<\/i> \u2014 il s'agit d'un changement d'\u00e9tat du choix d'une entit\u00e9. Cela informe tout le monde sur l'entit\u00e9 sur laquelle le joueur a plac\u00e9 le curseur de la souris. Comme on peut le comprendre, il s'agit de l'une des actions d'entr\u00e9e les plus fr\u00e9quentes envoy\u00e9es par les clients, c'est pourquoi, pour \u00e9conomiser la bande passante, nous l'avons optimis\u00e9e afin qu'elle occupe le moins de place possible. Cela est r\u00e9alis\u00e9 de la mani\u00e8re suivante : lors de la s\u00e9lection de chaque entit\u00e9, au lieu de sauvegarder des coordonn\u00e9es absolues et tr\u00e8s pr\u00e9cises sur la carte, le jeu conserve un d\u00e9calage relatif impr\u00e9cis par rapport \u00e0 la s\u00e9lection pr\u00e9c\u00e9dente. Cela fonctionne bien, car la s\u00e9lection avec la souris se produit g\u00e9n\u00e9ralement tr\u00e8s pr\u00e8s de la s\u00e9lection pr\u00e9c\u00e9dente. Cela entra\u00eene deux exigences importantes : <i>Input Actions<\/i> il ne faut jamais les ignorer et il est n\u00e9cessaire de les ex\u00e9cuter dans le bon ordre. Ces exigences sont satisfaites pour <i>Game State<\/i>. Mais puisque la t\u00e2che <i>\u00c9tat de latence<\/i> visant \u00e0 \u00ab avoir l'air suffisamment bon \u00bb pour le joueur, dans un \u00e9tat de latence, elles ne sont pas satisfaites. <i>Latency State<\/i> ne prend pas en compte <noindex><a rel=\"nofollow\" href=\"https:\/\/cdn.factorio.com\/assets\/img\/blog\/fff-302-megapacket-commit.jpg\">de nombreux cas particuliers<\/a><\/noindex>, li\u00e9s \u00e0 l'ignorance des cycles et aux variations de latence de transmission aller-retour.<\/p>\n<p>Vous pouvez d\u00e9j\u00e0 deviner o\u00f9 cela m\u00e8ne. Enfin, nous commen\u00e7ons \u00e0 voir les raisons du probl\u00e8me du m\u00e9gapacket. La racine du probl\u00e8me r\u00e9side dans le fait que, dans la prise de d\u00e9cision quant \u00e0 la n\u00e9cessit\u00e9 de transmettre l'action de changement de s\u00e9lection, la logique de s\u00e9lection d'entit\u00e9s repose sur <i>Latency State<\/i>, et cet \u00e9tat ne contient pas toujours les bonnes informations. C'est pourquoi le m\u00e9gapacket est g\u00e9n\u00e9r\u00e9 environ de cette mani\u00e8re :<\/p>\n<ol>\n<li>Le joueur a des probl\u00e8mes de connexion.<\/li>\n<li>Des m\u00e9canismes d'ignorance des cycles et de r\u00e9gulation de la latence de transmission aller-retour entrent en jeu.<\/li>\n<li>La file d'\u00e9tat de latence ne prend pas en compte ces m\u00e9canismes. Cela entra\u00eene la suppression pr\u00e9matur\u00e9e de certaines actions ou leur ex\u00e9cution dans le mauvais ordre, ce qui entra\u00eene une incorrecte <i>Latency State<\/i>.<\/li>\n<li>Le joueur n'a plus de probl\u00e8me de connexion et, pour rattraper le serveur, il simule jusqu'\u00e0 400 cycles.<\/li>\n<li>\u00c0 chaque cycle, une nouvelle action de changement de s\u00e9lection d'entit\u00e9 est g\u00e9n\u00e9r\u00e9e et pr\u00e9par\u00e9e pour \u00eatre envoy\u00e9e au serveur.<\/li>\n<li>Le client envoie au serveur un m\u00e9gapacket de plus de 400 changements de s\u00e9lection d'entit\u00e9s (et d'autres actions : l'\u00e9tat de tir, de marche, etc. ont \u00e9galement souffert de ce probl\u00e8me).<\/li>\n<li>Le serveur re\u00e7oit 400 actions d'entr\u00e9e. Comme il n'est pas autoris\u00e9 \u00e0 ignorer aucune action d'entr\u00e9e, il ordonne \u00e0 tous les clients d'ex\u00e9cuter ces actions et les envoie sur le r\u00e9seau.<\/li>\n<\/ol>\n<p>\nL'ironie est que le m\u00e9canisme, cens\u00e9 \u00e9conomiser la bande passante, finissait par cr\u00e9er d'\u00e9normes paquets sur le r\u00e9seau.<\/p>\n<p>Nous avons r\u00e9solu ce probl\u00e8me en corrigeant tous les cas limites de mise \u00e0 jour et de gestion de la file d'attente des retards. Bien que cela ait pris beaucoup de temps, cela valait finalement la peine d'\u00eatre mis en \u0153uvre correctement plut\u00f4t que de se fier \u00e0 des hacks rapides.<br \/>\n<br \/>Source : <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.2.1 - 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\/fr\/blog\/administrirovanie\/megapaket-kak-razrabotchikam-factorio-udalos-reshit-problemu-s-multipleerom-na-200-igrokov\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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\udd47M\u00e9ga-pack : comment les d\u00e9veloppeurs de Factorio ont r\u00e9ussi \u00e0 r\u00e9soudre le probl\u00e8me du multijoueur \u00e0 200 joueurs | ProHoster","description":".","canonical_url":"https:\/\/prohoster.info\/fr\/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":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/37812","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=37812"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/37812\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/28381"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=37812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=37812"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=37812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}