{"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\/es\/blog\/administrirovanie\/megapaket-kak-razrabotchikam-factorio-udalos-reshit-problemu-s-multipleerom-na-200-igrokov","title":{"rendered":"Megapaquete: c\u00f3mo los desarrolladores de Factorio lograron resolver el problema del multijugador con 200 jugadores","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Megapaquete: c\u00f3mo los desarrolladores de Factorio lograron resolver el problema del multijugador con 200 jugadores\" src=\"\/wp-content\/uploads\/2019\/09\/135544365299791de479555734645ef2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEn mayo de este a\u00f1o particip\u00e9 como jugador en <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/d_DlvkTK9hU\">el evento MMO KatherineOfSky<\/a><\/noindex>. Observ\u00e9 que cuando el n\u00famero de jugadores alcanza un cierto n\u00famero, cada pocos minutos, parte de ellos \"se desconectan\". Afortunadamente para ustedes (pero no para m\u00ed), yo fui uno de esos jugadores que se desconectaban <b>cada vez<\/b>, incluso con una buena conexi\u00f3n. Lo tom\u00e9 como un desaf\u00edo personal y comenc\u00e9 a buscar las causas del problema. Despu\u00e9s de tres semanas de depuraci\u00f3n, pruebas y correcciones, finalmente se solucion\u00f3 el error, pero este viaje no fue nada sencillo.<\/p>\n<p>Los problemas en los juegos multijugador son muy dif\u00edciles de rastrear. Generalmente ocurren en condiciones muy espec\u00edficas de par\u00e1metros de red y en situaciones de juego muy concretas (en este caso, con m\u00e1s de 200 jugadores). Y incluso cuando se logra reproducir el problema, no se puede depurar adecuadamente, porque insertar puntos de control detiene el juego, confunde los temporizadores y generalmente conduce a una desconexi\u00f3n por tiempo de espera. Pero gracias a la perseverancia y a una maravillosa herramienta llamada <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jagt\/clumsy\">clumsy<\/a><\/noindex> , logr\u00e9 averiguar qu\u00e9 estaba sucediendo.<\/p>\n<p>En resumen: debido a un error y a una implementaci\u00f3n incompleta de la simulaci\u00f3n del estado de latencia, el cliente a veces se encontraba en una situaci\u00f3n donde ten\u00eda que enviar en un solo ciclo un paquete de red que conten\u00eda las acciones de entrada del jugador para aproximadamente 400 entidades del juego (nosotros lo llamamos \"megapaquete\"). Despu\u00e9s de eso, el servidor no solo debe recibir correctamente todas esas acciones de entrada, sino tambi\u00e9n enviarlas a todos los dem\u00e1s clientes. Si tienes 200 clientes, esto r\u00e1pidamente se convierte en un problema. El canal hacia el servidor se congestiona r\u00e1pidamente, lo que provoca p\u00e9rdida de paquetes y un torrente de solicitudes de paquetes repetidos. La demora en las acciones de entrada provoca que a\u00fan m\u00e1s clientes comiencen a enviar megapaquetes, y su avalancha se vuelve a\u00fan m\u00e1s intensa. Los clientes afortunados logran recuperarse, los dem\u00e1s \"se desconectan\".<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<img decoding=\"async\" alt=\"Megapaquete: c\u00f3mo los desarrolladores de Factorio lograron resolver el problema del multijugador con 200 jugadores\" src=\"\/wp-content\/uploads\/2019\/09\/ff1a60d55eb6f5a4dc7be4b826d747f0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEl problema era bastante fundamental, y me tom\u00f3 2 semanas resolverlo. Es bastante t\u00e9cnico, as\u00ed que a continuaci\u00f3n explicar\u00e9 algunos detalles t\u00e9cnicos jugosos. Pero primero, necesitas saber que desde la versi\u00f3n 0.17.54, lanzada el 4 de junio, en condiciones de problemas temporales de conexi\u00f3n, el multijugador se volvi\u00f3 m\u00e1s estable y la ocultaci\u00f3n de latencias es mucho menos problem\u00e1tica (menos retardos y teletransportes). Adem\u00e1s, he cambiado la forma de ocultar las latencias en combate y espero que gracias a eso sean un poco m\u00e1s suaves.<\/p>\n<h3>Detalles t\u00e9cnicos del megapaquete multijugador<\/h3>\n<p>\nSimplificando, el multijugador en el juego funciona de la siguiente manera: todos los clientes simulan el estado del juego, recibiendo y enviando solo la entrada del jugador (denominada \"acciones de entrada\", <i>Input Actions<\/i>). La tarea principal del servidor es la transmisi\u00f3n <i>Input Actions<\/i> y el control de que todos los clientes realicen las mismas acciones en un mismo ciclo. Puedes leer m\u00e1s al respecto en el post <noindex><a rel=\"nofollow\" href=\"https:\/\/www.factorio.com\/blog\/post\/fff-149\">FFF-149<\/a><\/noindex>.<\/p>\n<p>Dado que el servidor debe tomar decisiones sobre qu\u00e9 acciones realizar, la acci\u00f3n del jugador sigue un camino aproximadamente as\u00ed: acci\u00f3n del jugador -&gt; cliente de juego -&gt; red -&gt; servidor -&gt; red -&gt; cliente de juego. Esto significa que cada acci\u00f3n del jugador se ejecuta solo despu\u00e9s de realizar este recorrido de ida y vuelta a trav\u00e9s de la red. Debido a esto, el juego podr\u00eda parecer incre\u00edblemente lento, por lo que casi inmediatamente despu\u00e9s de la aparici\u00f3n del multijugador en el juego se introdujo un mecanismo de ocultaci\u00f3n de latencias. La ocultaci\u00f3n de latencias simula la entrada del jugador sin tener en cuenta las acciones de otros jugadores y las decisiones del servidor.<\/p>\n<p><img decoding=\"async\" alt=\"Megapaquete: c\u00f3mo los desarrolladores de Factorio lograron resolver el problema del multijugador con 200 jugadores\" src=\"\/wp-content\/uploads\/2019\/09\/0b66a3b07d6aa2ab1d2329d782c78615.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEn Factorio, hay un estado del juego <i>Game State<\/i> \u2014 este es el estado completo del mapa, del jugador, de las entidades y de todo lo dem\u00e1s. Se simula de manera determinista en todos los clientes basado en las acciones recibidas del servidor. El estado del juego es sagrado, y si alguna vez comienza a diferir del servidor o de cualquier otro cliente, se produce una desincronizaci\u00f3n.<\/p>\n<p>Adem\u00e1s <i>Game State<\/i> tenemos un estado de latencias <i>Latency State<\/i>. Contiene un peque\u00f1o subconjunto del estado principal. <i>Latency State<\/i> no es sagrado y simplemente representa una imagen de c\u00f3mo se ver\u00e1 el estado del juego en el futuro basado en la entrada del jugador. <i>Input Actions<\/i>.<\/p>\n<p>Para esto, almacenamos una copia de las acciones creadas <i>Input Actions<\/i> en la cola de latencias.<\/p>\n<p><img decoding=\"async\" alt=\"Megapaquete: c\u00f3mo los desarrolladores de Factorio lograron resolver el problema del multijugador con 200 jugadores\" src=\"\/wp-content\/uploads\/2019\/09\/31e43263d1d2bfc79700730978fcd02a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEs decir, al final del proceso, del lado del cliente la imagen se ve m\u00e1s o menos as\u00ed:<\/p>\n<ol>\n<li>Aplicamos <i>Input Actions<\/i> todos los jugadores a <i>Game State<\/i> de la misma manera que estas acciones de entrada fueron recibidas del servidor.<\/li>\n<li>Eliminamos de la cola de retrasos todos los <i>Input Actions<\/i>, que, seg\u00fan los datos del servidor, ya se hab\u00edan aplicado a <i>Game State<\/i>.<\/li>\n<li>Eliminamos <i>Latency State<\/i> y lo reiniciamos para que se vea exactamente como <i>Game State<\/i>.<\/li>\n<li>Aplicamos todas las acciones de la cola de retrasos a <i>Latency State<\/i>.<\/li>\n<li>Con base en los datos <i>Game State<\/i> y <i>Latency State<\/i> renderizamos el juego para el jugador.<\/li>\n<\/ol>\n<p>\nTodo esto se repite en cada ciclo.<\/p>\n<p>\u00bfDemasiado complicado? No se relaje, esto a\u00fan no es todo. Para compensar la falta de fiabilidad de las conexiones a Internet, hemos creado dos mecanismos:<\/p>\n<ul>\n<li>Ciclos omitidos: cuando el servidor decide que <i>Input Actions<\/i> se llevar\u00e1n a cabo en el ciclo del juego, si no ha recibido <i>Input Actions<\/i> de alg\u00fan jugador (por ejemplo, debido a un aumento en la latencia), no esperar\u00e1, sino que comunicar\u00e1 a ese cliente 'no he tenido en cuenta tus <i>Input Actions<\/i>, intentar\u00e9 agregarlos en el siguiente ciclo'. Esto se hace para que, debido a problemas de conexi\u00f3n (o de computadora) de un jugador, la actualizaci\u00f3n del mapa no se retrase para todos los dem\u00e1s. Cabe mencionar que <i>Input Actions<\/i> no se ignoran, sino que simplemente se posponen.<\/li>\n<li>Retraso total de ida y vuelta: el servidor intenta suponer cu\u00e1l es el retraso de la transmisi\u00f3n de datos de ida y vuelta entre el cliente y el servidor para cada cliente. Cada 5 segundos, discute con el cliente el nuevo retraso si es necesario (dependiendo de c\u00f3mo se comport\u00f3 la conexi\u00f3n en el pasado), y aumenta o reduce el retraso de la transmisi\u00f3n de datos de ida y vuelta en consecuencia.<\/li>\n<\/ul>\n<p>\nEstos mecanismos en s\u00ed mismos son bastante simples, pero cuando se usan juntos (lo cual ocurre a menudo con problemas de conexi\u00f3n), la l\u00f3gica del c\u00f3digo se vuelve dif\u00edcil de manejar y con muchos casos l\u00edmite. Adem\u00e1s, cuando entran en juego estos mecanismos, el servidor y la cola de retrasos deben implementar correctamente un particular <i>Input Action<\/i> llamada <i>StopMovementInTheNextTick<\/i>. Gracias a esto, ante problemas de conexi\u00f3n el personaje no se mover\u00e1 solo (por ejemplo, hacia un tren).<\/p>\n<p>Ahora necesito explicarles c\u00f3mo funciona la selecci\u00f3n de entidades. Uno de los tipos transmitidos <i>Input Action<\/i> \u2014 este es un cambio en el estado de selecci\u00f3n de la entidad. Informa a todos sobre qu\u00e9 entidad ha se\u00f1alado el jugador con el cursor. Como se puede entender, esta es una de las acciones de entrada m\u00e1s frecuentes enviadas por los clientes, por lo que, para ahorrar ancho de banda, la hemos optimizado para que ocupe el menor espacio posible. Se implementa de la siguiente manera: al seleccionar cada entidad, en lugar de guardar las coordenadas absolutas y de alta precisi\u00f3n del mapa, el juego guarda un desplazamiento relativo de baja precisi\u00f3n desde la selecci\u00f3n anterior. Esto funciona bien porque la selecci\u00f3n con el mouse generalmente ocurre muy cerca de la selecci\u00f3n anterior. Por lo tanto, surgen dos requisitos importantes: <i>Input Actions<\/i> nunca se deben omitir y deben ejecutarse en el orden correcto. Estos requisitos se satisfacen para <i>Game State<\/i>. Pero dado que la tarea <i>Estado de latencia<\/i> es 'parecer lo suficientemente bueno' para el jugador, en el estado de latencias no se cumplen. <i>Latency State<\/i> no tiene en cuenta <noindex><a rel=\"nofollow\" href=\"https:\/\/cdn.factorio.com\/assets\/img\/blog\/fff-302-megapacket-commit.jpg\">muchos casos l\u00edmite<\/a><\/noindex>, relacionados con la omisi\u00f3n de ciclos y el cambio de latencias de ida y vuelta.<\/p>\n<p>Ya puedes imaginar a d\u00f3nde va todo esto. Por fin comenzamos a ver las causas del problema del megapaquete. La ra\u00edz del problema es que, al tomar la decisi\u00f3n sobre si se debe enviar la acci\u00f3n de cambio de selecci\u00f3n, la l\u00f3gica de selecci\u00f3n de entidades se basa en <i>Latency State<\/i>, y este estado no siempre contiene informaci\u00f3n correcta. Por lo tanto, el megapaquete se genera aproximadamente de esta manera:<\/p>\n<ol>\n<li>El jugador tiene problemas de conexi\u00f3n.<\/li>\n<li>Entran en juego los mecanismos de omisi\u00f3n de ciclos y regulaci\u00f3n de la latencia de ida y vuelta.<\/li>\n<li>La cola del estado de latencias no tiene en cuenta estos mecanismos. Esto lleva a que algunas acciones sean eliminadas prematuramente o ejecutadas en el orden incorrecto, lo que resulta en un incorrecto <i>Latency State<\/i>.<\/li>\n<li>El jugador supera el problema de conexi\u00f3n y, para ponerse al d\u00eda con el servidor, simula hasta 400 ciclos.<\/li>\n<li>En cada ciclo se genera y se prepara para enviar al servidor una nueva acci\u00f3n de cambio de selecci\u00f3n de entidad.<\/li>\n<li>El cliente env\u00eda al servidor un megapaquete de m\u00e1s de 400 cambios de selecci\u00f3n de entidades (y otras acciones: el estado de disparo, caminar, etc. tambi\u00e9n sufrieron de este problema).<\/li>\n<li>El servidor recibe 400 acciones de entrada. Como no se le permite omitir ninguna acci\u00f3n de entrada, ordena a todos los clientes realizar esas acciones y las env\u00eda a trav\u00e9s de la red.<\/li>\n<\/ol>\n<p>\nLa iron\u00eda es que el mecanismo dise\u00f1ado para ahorrar ancho de banda, resulta que creaba enormes paquetes de red.<\/p>\n<p>Resolvimos este problema corrigiendo todos los casos l\u00edmite de actualizaci\u00f3n y soporte de la cola de retrasos. Aunque tom\u00f3 bastante tiempo, al final vali\u00f3 la pena implementarlo correctamente en lugar de confiar en soluciones r\u00e1pidas.<br \/>\n<br \/>Fuente: <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 - 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\/es\/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\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\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\/es\/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\udd47Megapaquete: c\u00f3mo los desarrolladores de Factorio lograron resolver el problema del multijugador para 200 jugadores | ProHoster","description":".","canonical_url":"https:\/\/prohoster.info\/es\/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":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/37812","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=37812"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/37812\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/28381"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=37812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=37812"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=37812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}