{"id":1199,"date":"2023-05-18T23:43:04","date_gmt":"2023-05-18T21:43:04","guid":{"rendered":"https:\/\/konekan.fr\/?p=1199"},"modified":"2024-12-08T17:57:35","modified_gmt":"2024-12-08T16:57:35","slug":"protocole-reseau-et-broker-rust-pour-le-jeux-video","status":"publish","type":"post","link":"https:\/\/konekan.fr\/index.php\/2023\/05\/18\/protocole-reseau-et-broker-rust-pour-le-jeux-video\/","title":{"rendered":"Protocole r\u00e9seau et broker Rust pour le jeux vid\u00e9o"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"1199\" class=\"elementor elementor-1199\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-45ebf1ad elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"45ebf1ad\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-wider\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1c7ed7ab\" data-id=\"1c7ed7ab\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6bce50cb elementor-widget elementor-widget-heading\" data-id=\"6bce50cb\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Protocole r\u00e9seau et broker Rust pour le jeux vid\u00e9o<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-8787267 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"8787267\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-674051fd\" data-id=\"674051fd\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2958fd86 elementor-align-center elementor-widget elementor-widget-post-info\" data-id=\"2958fd86\" data-element_type=\"widget\" data-widget_type=\"post-info.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul class=\"elementor-inline-items elementor-icon-list-items elementor-post-info\">\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item elementor-repeater-item-49a232a elementor-inline-item\" itemprop=\"author\">\n\t\t\t\t\t\t<a href=\"https:\/\/konekan.fr\/index.php\/author\/lucasguichard127\/\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"far fa-user-circle\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text elementor-post-info__item elementor-post-info__item--type-author\">\n\t\t\t\t\t\t\t\t\t\tlucasguichard127\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t<\/li>\n\t\t\t\t<li class=\"elementor-icon-list-item elementor-repeater-item-05df5ef elementor-inline-item\" itemprop=\"datePublished\">\n\t\t\t\t\t\t<a href=\"https:\/\/konekan.fr\/index.php\/2023\/05\/18\/\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-calendar\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text elementor-post-info__item elementor-post-info__item--type-date\">\n\t\t\t\t\t\t\t\t\t\t<time>mai 18, 2023<\/time>\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t<\/li>\n\t\t\t\t<li class=\"elementor-icon-list-item elementor-repeater-item-697cf04 elementor-inline-item\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"far fa-clock\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text elementor-post-info__item elementor-post-info__item--type-time\">\n\t\t\t\t\t\t\t\t\t\t<time>11:43 pm<\/time>\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t<li class=\"elementor-icon-list-item elementor-repeater-item-bf070ba elementor-inline-item\" itemprop=\"commentCount\">\n\t\t\t\t\t\t<a href=\"https:\/\/konekan.fr\/index.php\/2023\/05\/18\/protocole-reseau-et-broker-rust-pour-le-jeux-video\/#respond\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"far fa-comment-dots\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text elementor-post-info__item elementor-post-info__item--type-comments\">\n\t\t\t\t\t\t\t\t\t\tAucun commentaire\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t<\/li>\n\t\t\t\t<li class=\"elementor-icon-list-item elementor-repeater-item-dcee5c4 elementor-inline-item\" itemprop=\"about\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-tags\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text elementor-post-info__item elementor-post-info__item--type-terms\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-post-info__terms-list\">\n\t\t\t\t<a href=\"https:\/\/konekan.fr\/index.php\/tag\/async\/\" class=\"elementor-post-info__terms-list-item\">async<\/a>, <a href=\"https:\/\/konekan.fr\/index.php\/tag\/network\/\" class=\"elementor-post-info__terms-list-item\">network<\/a>, <a href=\"https:\/\/konekan.fr\/index.php\/tag\/team-project\/\" class=\"elementor-post-info__terms-list-item\">Projet d&#039;\u00e9quipe<\/a>, <a href=\"https:\/\/konekan.fr\/index.php\/tag\/rust\/\" class=\"elementor-post-info__terms-list-item\">Rust<\/a>, <a href=\"https:\/\/konekan.fr\/index.php\/tag\/tokio\/\" class=\"elementor-post-info__terms-list-item\">tokio<\/a>, <a href=\"https:\/\/konekan.fr\/index.php\/tag\/unreal-engine\/\" class=\"elementor-post-info__terms-list-item\">Unreal Engine<\/a>\t\t\t\t<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-2a3c173f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"2a3c173f\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-114bcf9e\" data-id=\"114bcf9e\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1d5c3837 elementor-position-left elementor-widget__width-auto elementor-view-default elementor-mobile-position-top elementor-vertical-align-top elementor-widget elementor-widget-icon-box\" data-id=\"1d5c3837\" data-element_type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<a href=\"https:\/\/github.com\/GuicLuca\/RekT_Protocol\" target=\"_blank\" class=\"elementor-icon\" tabindex=\"-1\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fab fa-github-alt\"><\/i>\t\t\t\t<\/a>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tpage GitHub du projet\n\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-12cad12e elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"12cad12e\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-wider\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-415ba934\" data-id=\"415ba934\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2a0465f1 elementor-widget elementor-widget-heading\" data-id=\"2a0465f1\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Contexte<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-76f2afc0 elementor-widget elementor-widget-text-editor\" data-id=\"76f2afc0\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"text-align: justify;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Le protocole RekT (Rapid Encrypted Knot Transfer) a \u00e9t\u00e9 d\u00e9velopp\u00e9 dans le cadre du cours de projet de la session d&rsquo;hiver 2023 dispens\u00e9 \u00e0 l&rsquo;UQAC (universit\u00e9 du Qu\u00e9bec \u00e0 Chicoutimi) par Val\u00e8re Plantevin. Le projet consistait \u00e0 cr\u00e9er une simulation de plusieurs centaines de joueurs sur une seule carte de jeu en utilisant Unreal Engine. Le cours a \u00e9t\u00e9 suivi par un groupe de 8 \u00e9tudiants qui souhaitaient approfondir leurs connaissances en d\u00e9veloppement de jeux vid\u00e9o multijoueur en ligne. Le cours a adopt\u00e9 un format \u00ab\u00a0recherche\u00a0\u00bb, ce qui signifie que nous \u00e9tions laiss\u00e9s \u00e0 nous-m\u00eames pour faire face \u00e0 nos difficult\u00e9s et apprendre \u00e0 mieux comprendre de mani\u00e8re autonome les nouvelles technologies et concepts. N\u00e9anmoins, nous avions un rapport de progression hebdomadaire pour nous assurer que le projet avan\u00e7ait correctement.<\/p>\n<p style=\"text-align: justify;\">Le groupe a \u00e9t\u00e9 divis\u00e9e en deux \u00e9quipes. Une<span style=\"font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-size: 1.1em; font-weight: var( --e-global-typography-text-font-weight ); letter-spacing: 0.1px;\">&nbsp;\u00e9quipe \u00ab\u00a0moteur de jeu\u00a0\u00bb (5 personnes), \u00e9tait charg\u00e9e de comprendre le fonctionnement de l&rsquo;ECS (Entity Component System) Flecs afin de g\u00e9rer les actions de tous les joueurs c\u00f4t\u00e9 client. Ils devaient \u00e9galement remplacer la r\u00e9plication d&rsquo;Unreal Engine 5 pour prendre en charge le protocole d\u00e9velopp\u00e9 par la deuxi\u00e8me \u00e9quipe. Compos\u00e9e de trois personnes, la deuxi\u00e8me \u00e9quipe \u00ab\u00a0r\u00e9seau\u00a0\u00bb, \u00e9tait charg\u00e9e d&rsquo;\u00e9crire un protocole pub\/sub et de coder un broker (serveur) pour prendre en charge autant de connexions que possible avec une consommation minimale.<\/span><\/p>\n<p>Dans ce projet j&rsquo;ai pris part \u00e0 la deuxi\u00e8me \u00e9quipe et c&rsquo;est pourquoi la suite de cette article pr\u00e9sentera en d\u00e9tail la partie r\u00e9seau du projet.&nbsp;<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-96c7a42 elementor-widget-divider--view-line_icon elementor-view-default elementor-widget-divider--element-align-center elementor-widget elementor-widget-divider\" data-id=\"96c7a42\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon elementor-divider__element\">\n\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-network-wired\"><\/i><\/div>\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-71bbb2ef elementor-widget elementor-widget-heading\" data-id=\"71bbb2ef\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h5 class=\"elementor-heading-title elementor-size-default\">Un travail en deux temps<\/h5>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6fc87336 elementor-widget elementor-widget-text-editor\" data-id=\"6fc87336\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"text-align: justify;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0Pour notre \u00e9quipe, le travail s&rsquo;est d\u00e9roul\u00e9 en deux p\u00e9riodes. Il y a d&rsquo;abord eu une phase de r\u00e9flexion et de conception dans laquelle nous avons appris le fonctionnement des protocoles pub\/sub et \u00e9tablie une liste des besoins d&rsquo;un protocole r\u00e9seau dans le jeux vid\u00e9o afin de pouvoir r\u00e9diger notre propre protocole dont vous pouvez retrouver la RFC <a href=\"https:\/\/docs.google.com\/document\/d\/14CvwkXtRae_5xV28Figp6gdxwyYd5Fqvls8pvmseKAI\/edit?usp=sharing\">ici<\/a>. En suite, une deuxi\u00e8me phase est venue dans laquelle nous avons cod\u00e9 un broker qui utilise notre protocole afin de permettre \u00e0 l&rsquo;\u00e9quipe \u00ab\u00a0moteur de jeu\u00a0\u00bb de r\u00e9aliser des simulations de connexion jusqu&rsquo;\u00e0 atteindre les 300 joueurs et plus !<\/p><p style=\"text-align: justify;\">En bref, notre objectif c&rsquo;est de chercher toujours plus de performance et d&rsquo;optimisation !<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ebcd963 elementor-widget elementor-widget-heading\" data-id=\"ebcd963\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h5 class=\"elementor-heading-title elementor-size-default\">Le protocole RekT<\/h5>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-17dd928 elementor-widget elementor-widget-text-editor\" data-id=\"17dd928\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"text-align: justify;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Le protocole RekT (Rapid encrypted knot transfert) est un protocole r\u00e9seau bas\u00e9 sur UDP, con\u00e7u pour r\u00e9pondre aux besoins de vitesse et d&rsquo;optimisation des jeux vid\u00e9o multijoueurs avec un grand nombre de joueurs. Le protocole RekT s&rsquo;inspire du protocole Tachyon et se concentre principalement sur la rapidit\u00e9 de transmission des donn\u00e9es. Conscient des exigences sp\u00e9cifiques des jeux vid\u00e9o multijoueurs avec une grande quantit\u00e9 de joueurs (300+), RekT vise \u00e0 minimiser les latences et \u00e0 optimiser les performances du r\u00e9seau.<\/p>\n<p style=\"text-align: justify;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Lors de la connexion initiale, RekT utilise un syst\u00e8me de handcheck pour s&rsquo;assurer de l&rsquo;authenticit\u00e9 des clients et les enregistrer en tant que connexion valide sur le serveur. Une fois la connexion \u00e9tablie, le protocole fonctionne selon un mod\u00e8le pub\/sub (publication\/abonnement) avec l&rsquo;utilisation de topics (sujets) et d&rsquo;objets (ensemble de sujets). Cela permet aux clients de s&rsquo;abonner aux sujets pertinents pour recevoir les donn\u00e9es qui les int\u00e9ressent.<\/p>\n<p style=\"text-align: justify;\">\u00a0 \u00a0 \u00a0 \u00a0 Pour simplifier la mise en \u0153uvre du protocole, RekT ne prend pas en charge actuellement les syst\u00e8mes d&rsquo;autorit\u00e9 ou de chiffrement. Cependant, nous sommes conscients que la s\u00e9curit\u00e9 des donn\u00e9es doit \u00eatre prise en compte. Cella pourrait \u00eatre ajout\u00e9e dans des versions ult\u00e9rieures du protocole.<\/p>\n<p style=\"text-align: justify;\">\u00a0 \u00a0 \u00a0 \u00a0Afin de maintenir une connexion active avec le serveur, les clients doivent envoyer p\u00e9riodiquement des requ\u00eates ou des \u00ab\u00a0heartbeat\u00a0\u00bb (signe de vie) pour maintenir le contact lorsque aucune autre requ\u00eate n&rsquo;est n\u00e9cessaire. Si un client ne maintient pas cette connexion, il sera d\u00e9connect\u00e9 par le serveur.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-7c8f36ab elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7c8f36ab\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-379ffa14\" data-id=\"379ffa14\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1d689bab elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"1d689bab\" data-element_type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-network-wired\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Protocole : UDP <\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-cogs\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Architecture: Pub\/Sub<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-37ec5688\" data-id=\"37ec5688\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1d50fcff elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"1d50fcff\" data-element_type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-search-minus\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Insipartion : protocole Tachyon <\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"far fa-clock\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">dur\u00e9e : 3 semaines<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-3861c34a elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"3861c34a\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-61516edd\" data-id=\"61516edd\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-647ab02d elementor-widget elementor-widget-testimonial\" data-id=\"647ab02d\" data-element_type=\"widget\" data-widget_type=\"testimonial.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-testimonial-wrapper\">\n\t\t\t\t\t\t\t<div class=\"elementor-testimonial-content\">Pour la deuxi\u00e8me phase du projet nous avons tous les trois du d\u00e9couvrir et apprendre le langage de programmation Rust pour coder le broker. Ce d\u00e9fi de plus \u00e9tait optionnel mais fortement conseill\u00e9 au vue des performances du langage et de ses aptitudes \u00e0 optimiser la m\u00e9moire et l'asynchrone. Cela explique pourquoi le serveur a eu plusieurs versions ;)y<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-testimonial-meta elementor-has-image elementor-testimonial-image-position-aside\">\n\t\t\t\t<div class=\"elementor-testimonial-meta-inner\">\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-testimonial-image\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/konekan.fr\/wp-content\/uploads\/2023\/02\/portraitDeMoi-scaled-e1676157618267-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-image-592\" alt=\"C&#039;est ma petite t\u00eate sur cette photo\" \/>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-testimonial-details\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-testimonial-job\">- Lucas <\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<div class=\"elementor-element elementor-element-ca1f763 elementor-widget elementor-widget-heading\" data-id=\"ca1f763\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h5 class=\"elementor-heading-title elementor-size-default\">Le broker<\/h5>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-039eabd elementor-widget elementor-widget-text-editor\" data-id=\"039eabd\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"text-align: justify;\">\u00a0 \u00a0 \u00a0 \u00a0 Le d\u00e9veloppement de la partie codage du serveur RekT a \u00e9t\u00e9 r\u00e9alis\u00e9 de mani\u00e8re progressive, en surmontant le d\u00e9fi de ma\u00eetriser le langage de programmation Rust, avec lequel nous n&rsquo;\u00e9tions pas familier du tout au d\u00e9part. Il se trouve que notre travail a pris la forme d&rsquo;un projet avec 3 versions majeurs que je vais survoler plus bas. Vous pouvez consulter le d\u00e9p\u00f4t GitHub pour voir le code.<\/p><p style=\"text-align: justify;\"><strong><span style=\"text-decoration: underline;\">Version 1 &#8211; D\u00e9couverte du langage :<\/span><\/strong> Dans le dossier \u00ab\u00a0GYM\u00a0\u00bb du projet, nous nous sommes consacr\u00e9e \u00e0 la d\u00e9couverte du langage Rust. Cette \u00e9tape \u00e9tait cruciale pour acqu\u00e9rir les connaissances de base, comprendre la syntaxe et assimiler les bonnes pratiques de programmation sp\u00e9cifiques \u00e0 Rust. Dans cette version nous avons r\u00e9ussi a faire communiquer deux client entre eux sans le syst\u00e8me de signe de vie (v\u00e9rification du maintien de la connexion) ni le syst\u00e8me de calcule du ping. En effet le broker \u00e9tant synchrone cela nous emp\u00each\u00e9 de faire plusieurs t\u00e2che en m\u00eame temps. C&rsquo;est pourquoi nous sommes pass\u00e9 \u00e0 l&rsquo;\u00e9tape sup\u00e9rieur avec la version 2.<\/p><p style=\"text-align: justify;\"><strong><span style=\"text-decoration: underline;\">Version 2 &#8211; Premier broker asynchrone avec Tokio :<\/span><\/strong> Le dossier \u00ab\u00a0Async_broker\u00a0\u00bb a \u00e9t\u00e9 d\u00e9di\u00e9 \u00e0 la cr\u00e9ation de la premi\u00e8re version fonctionnelle du broker en utilisant la biblioth\u00e8que Tokio pour la programmation asynchrone. Bien que toute les fonctionnalit\u00e9s \u00e9taient pr\u00e9sente, cette version n&rsquo;a pas su r\u00e9pondre aux attentes en termes de performances et de rapidit\u00e9 requises pour le protocole RekT. Notre mani\u00e8re d&rsquo;utiliser les t\u00e2ches asynchrone de Tokio ne nous a pas \u00e9pargn\u00e9 sur la mani\u00e8re de partager les ressources entre elles ce qui a caus\u00e9 de nombreuse duplication de m\u00e9moire et surtout la cr\u00e9ation excessive de tache asynchrone simultan\u00e9. Cela a men\u00e9 \u00e0 une g\u00e9n\u00e9ration exponentiel de la consommation de m\u00e9moire RAM et un usage du CPU disproportionn\u00e9.\u00a0<\/p><p style=\"text-align: justify;\"><span style=\"text-decoration: underline;\"><strong>Version 3 &#8211; Qu\u00eate d&rsquo;optimisation et patron de conception message :<\/strong><\/span> Le sous-dossier \u00ab\u00a0Async_broker_message\u00a0\u00bb a \u00e9t\u00e9 consacr\u00e9 \u00e0 la recherche d&rsquo;optimisations suppl\u00e9mentaires pour le broker et \u00e0 la correction des mauvais usage du langage. Nous avons adopt\u00e9 le patron de conception message pour am\u00e9liorer la gestion des t\u00e2ches asynchrones concurrentes ce qui nous a permis de diviser drastiquement le nombre de t\u00e2che simultan\u00e9 mais aussi de mieux g\u00e9rer la propagation de variable entre t\u00e2ches. Nous avons \u00e9galement revue les structures de donn\u00e9 commune \u00e0 toutes les t\u00e2ches pour \u00e9viter les clones et passer le plus possible par r\u00e9f\u00e9rence. Cette phase d&rsquo;optimisation a \u00e9t\u00e9 essentielle pour augmenter la capacit\u00e9 de traitement du broker et atteindre les performances requises par le protocole RekT et le projet de mani\u00e8re g\u00e9n\u00e9rale.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-3b37ccc elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"3b37ccc\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-7fa492b\" data-id=\"7fa492b\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-de5da5d elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"de5da5d\" data-element_type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-code\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Langage : Rust<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-cubes\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Crate principale : Tokio<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-3e209f3\" data-id=\"3e209f3\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7a2ab53 elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"7a2ab53\" data-element_type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-weight-hanging\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Taille du projet : 4,500 lignes de codes<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-check-circle\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">dur\u00e9e : 2 mois et demi<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<div class=\"elementor-element elementor-element-9c0e8ca elementor-widget-divider--view-line_icon elementor-view-default elementor-widget-divider--element-align-center elementor-widget elementor-widget-divider\" data-id=\"9c0e8ca\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon elementor-divider__element\">\n\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-network-wired\"><\/i><\/div>\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-44cb8b3 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"44cb8b3\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8f099b8\" data-id=\"8f099b8\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-cba42b2 elementor-widget elementor-widget-heading\" data-id=\"cba42b2\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h5 class=\"elementor-heading-title elementor-size-default\">Le r\u00e9sultat du projet<\/h5>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-b1325f5 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"b1325f5\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-4d15603\" data-id=\"4d15603\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-e320d68 elementor-widget elementor-widget-text-editor\" data-id=\"e320d68\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"text-align: justify;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Afin de tester le travail des deux \u00e9quipes, l&rsquo;\u00e9quipe \u00ab\u00a0moteur de jeu\u00a0\u00bb a cr\u00e9e un jeu tr\u00e8s simple jouable par une IA qui consiste en un simple labyrinthe qui comporte des portes de couleur. Pour traverser ces portes vous devrez vous parer de la couleur de cette derni\u00e8re gr\u00e2ce \u00e0 une touche pour passer du d&rsquo;une couleur \u00e0 l&rsquo;autre.<\/p><p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Ce projeta \u00e9t\u00e9 un succ\u00e8s pour nous car nous avons su mettre en place toutes les mesures n\u00e9cessaires pour apprendre en autonomie les connaissance suffisante pour satisfaire les besoins du projet. Notre professeur a reconnu les efforts fourni et a salu\u00e9 le r\u00e9sultat fini qui est tr\u00e8s satisfaisant !<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-bde9d52 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"bde9d52\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-66 elementor-inner-column elementor-element elementor-element-be7591f\" data-id=\"be7591f\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d91648c elementor-widget elementor-widget-image\" data-id=\"4d91648c\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"522\" height=\"338\" src=\"https:\/\/konekan.fr\/wp-content\/uploads\/2023\/05\/maze.gif\" class=\"elementor-animation-grow attachment-full size-full wp-image-1241\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3a4c3920 elementor-widget elementor-widget-text-editor\" data-id=\"3a4c3920\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"text-align: left;\">Dans le gif ci-dessus on voit 300 IA r\u00e9pliqu\u00e9 qui jouent au jeux tout en \u00e9tant synchronis\u00e9 sur le r\u00e9seau. On remarque que les mouvements sont fluide et coh\u00e9rent malgr\u00e9 la latence et les possible lag du r\u00e9seau.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-ed1dfcd\" data-id=\"ed1dfcd\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-16a916d8 elementor-widget elementor-widget-text-editor\" data-id=\"16a916d8\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p style=\"text-align: right;\">Dans le gif ci-dessous on observe de plus pr\u00eat le comportement des IA au abord d&rsquo;une porte rouge.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5e24ebe0 elementor-widget elementor-widget-image\" data-id=\"5e24ebe0\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"338\" src=\"https:\/\/konekan.fr\/wp-content\/uploads\/2023\/05\/maze_door.webp\" class=\"elementor-animation-grow attachment-full size-full wp-image-1240\" alt=\"\" srcset=\"https:\/\/konekan.fr\/wp-content\/uploads\/2023\/05\/maze_door.webp 600w, https:\/\/konekan.fr\/wp-content\/uploads\/2023\/05\/maze_door-300x169.webp 300w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<div class=\"elementor-element elementor-element-b2aa0b5 elementor-widget-divider--view-line_text elementor-widget-divider--element-align-center elementor-widget elementor-widget-divider\" data-id=\"b2aa0b5\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t\t<span class=\"elementor-divider__text elementor-divider__element\">\n\t\t\t\tMerci d'avoir lu l'article\t\t\t\t<\/span>\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-4ee6182c elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"4ee6182c\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-wider\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-346b4735\" data-id=\"346b4735\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Lors d&rsquo;un projet de cours j&rsquo;ai \u00e9t\u00e9 amen\u00e9 \u00e0 participer \u00e0 la cr\u00e9ation d&rsquo;un protocole r\u00e9seau pour supporter la connexion de plus de 300 joueurs en simultan\u00e9.<\/p>\n","protected":false},"author":1,"featured_media":1200,"comment_status":"open","ping_status":"open","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[34,33],"tags":[38,42,28,35,39,25],"class_list":["post-1199","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-other","category-network","tag-async","tag-network","tag-team-project","tag-rust","tag-tokio","tag-unreal-engine"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/konekan.fr\/index.php\/wp-json\/wp\/v2\/posts\/1199","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/konekan.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/konekan.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/konekan.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/konekan.fr\/index.php\/wp-json\/wp\/v2\/comments?post=1199"}],"version-history":[{"count":32,"href":"https:\/\/konekan.fr\/index.php\/wp-json\/wp\/v2\/posts\/1199\/revisions"}],"predecessor-version":[{"id":1918,"href":"https:\/\/konekan.fr\/index.php\/wp-json\/wp\/v2\/posts\/1199\/revisions\/1918"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/konekan.fr\/index.php\/wp-json\/wp\/v2\/media\/1200"}],"wp:attachment":[{"href":"https:\/\/konekan.fr\/index.php\/wp-json\/wp\/v2\/media?parent=1199"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/konekan.fr\/index.php\/wp-json\/wp\/v2\/categories?post=1199"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/konekan.fr\/index.php\/wp-json\/wp\/v2\/tags?post=1199"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}