PlayFab Party et connexions pair à pair directes
Cette page explique comment activer et utiliser les connexions pair à pair directes dans PlayFab Party à l’aide d’exemples de code de jeu. Elle inclut également des considérations pour vous aider à déterminer quand utiliser des connexions pair à pair directes dans vos jeux.Quand utiliser des connexions pair à pair directes
PlayFab Party prend en charge une grande variété de topologies de communication. Conceptuellement, tous les messages de clavardage ou de données vont directement d’un appareil ou utilisateur pair vers les autres. Cependant, Party utilise automatiquement un service de relais infonuagique transparent pour éviter les problèmes environnementaux et de sécurité courants liés à l’établissement de connexions pair à pair directes. Vous pouvez obtenir une transmission de données à faible latence en tirant parti de ses mesures de qualité de service (QoS) en arrière-plan. (Pour plus d’informations, consultez Mesures QoS de PlayFab Party.) Vous pouvez éventuellement activer les connexions pair à pair directes pour réduire davantage la latence de transmission des données. En raison des problèmes de sécurité détaillés dans la section « Considérations de sécurité » ci-dessous, Microsoft vous recommande d’utiliser notre service de relais infonuagique plutôt que d’activer la connexion pair à pair directe, sauf si votre titre a des exigences de latence strictes.Prise en charge des plateformes
La connectivité directe entre pairs est prise en charge dans les versions Windows 10, Microsoft Game Core, Nintendo Switch, PlayStation®4 et PlayStation®5 de la bibliothèque Party. Les autres versions de la bibliothèque utilisent toujours le relais infonuagique pour la transmission des données, quelles que soient les options de connectivité directe entre pairs spécifiées au moyen de l’API cliente. « PlayStation » est une marque déposée ou une marque commerciale de Sony Interactive Entertainment Inc.Considérations de sécurité
Comme la connectivité directe entre pairs est utilisée pour envoyer des données directement entre les clients, tous les clients doivent savoir comment se connecter les uns aux autres. Pour cela, les adresses IP des clients sont partagées entre les clients d’une même session de jeu. Par exemple, si un jeu multijoueur à 16 joueurs utilise la connectivité directe entre pairs pour mettre à jour les positions des joueurs, chacun des 16 clients de jeu doit connaître les adresses IP des 15 autres clients pour savoir à qui envoyer les données. Le partage d’adresses IP entre clients de jeu présente un risque de sécurité. Il peut permettre à des acteurs malveillants de détecter l’adresse IP et de l’utiliser pour attaquer d’autres joueurs en dehors des jeux. Une méthode courante pour mener ces attaques consiste à utiliser des attaques par déni de service (DOS), ou une variante appelée attaques par déni de service distribué (DDOS). Ces attaques consistent à tenter de submerger un réseau de trafic réseau superflu. Si un attaquant parvient à envoyer suffisamment de trafic réseau à sa victime, le matériel réseau de la victime (modem et routeur) doit consacrer tout son temps à traiter ce trafic superflu et n’a plus le temps d’effectuer son travail normal de traitement des connexions réseau légitimes. Concrètement, la victime ne peut plus utiliser son réseau pendant toute la durée de l’attaque. On parle souvent de « se faire éjecter du réseau ». En conclusion, une connectivité directe entre pairs réussie peut offrir une latence plus faible entre certains appareils. Cependant, tenter de l’établir oblige également les utilisateurs à divulguer leurs adresses IP à d’autres, ce qui peut permettre à des utilisateurs malveillants d’attaquer leurs appareils et leurs connexions Internet en dehors du titre. La connexion directe entre pairs peut également ne pas être autorisée sur certaines plateformes pour des raisons de stratégie. Assurez-vous d’utiliser les options de connectivité directe entre pairs adaptées à vos objectifs de performances et de sécurité. Si vous décidez d’utiliser la connectivité directe entre pairs après avoir pesé les risques, utilisez les exemples suivants pour activer cette fonctionnalité dans votre titre, réseau par réseau et appareil par appareil.Scénarios LAN
La connectivité directe entre pairs dans Party peut être utilisée pour obtenir une latence extrêmement faible dans les scénarios LAN. Même dans ces scénarios, une connectivité Internet limitée reste toutefois nécessaire pour prendre en charge l’authentification des utilisateurs, les données et analyses LiveOps, ainsi que les fonctionnalités d’accessibilité du clavardage vocal.Considérations relatives à la bande passante montante
L’utilisation de la connectivité pair à pair directe peut augmenter l’utilisation de la bande passante montante de votre jeu. Lors de la transmission d’un message de jeu ou vocal au moyen du service de relais infonuagique, Party envoie un seul message au service; le service réplique ensuite le message et le transfère à chaque appareil cible. Lors de la transmission d’un message de jeu ou vocal au moyen de connexions pair à pair directes, Party réplique le message et l’envoie au moyen d’une connexion directe pour chaque appareil cible avec lequel une connexion pair à pair directe a été établie. Par conséquent, l’utilisation de la bande passante montante de votre jeu augmente proportionnellement au nombre d’appareils avec lesquels une connexion pair à pair directe a été établie. Déterminez si cette augmentation de la bande passante montante est acceptable pour votre jeu avant d’activer les connexions pair à pair directes.Utilisation des connexions pair à pair directes dans votre jeu
Activation des connexions pair à pair directes dans votre réseau
Lors de la création d’un réseau au moyen dePartyManager::CreateNewNetwork(), vous pouvez spécifier divers paramètres de configuration réseau au moyen de la structure PartyNetworkConfiguration fournie à l’appel. Vous pouvez utiliser le champ PartyNetworkConfiguration::directPeerConnectivityOptions pour spécifier si et comment la connectivité pair à pair directe est prise en charge pour les appareils du réseau.
L’exemple suivant montre une configuration réseau qui spécifie que des connexions pair à pair directes doivent être tentées entre tous les appareils du réseau, quel que soit le type de plateforme ou le fournisseur de connexion.
L’établissement d’une connectivité directe entre pairs se fait au mieux et peut s’avérer impossible en raison de facteurs environnementaux, des options de connectivité propres à chaque appareil ou de la stratégie de la plateforme. Pour plus d’informations sur la façon de déterminer si une connexion pair à pair directe a été établie avec un appareil particulier, consultez Évaluation du type de connexion et de la latence.
Limitation de la connectivité directe entre pairs par appareil
Outre les options de connectivité directe entre pairs de la configuration réseau, un appareil peut limiter davantage la connectivité directe entre pairs pour tous les réseaux dans lesquels il s’authentifie, en utilisantPartyManager::SetOption() pour définir PartyOption::LocalDeviceDirectPeerConnectivityOptionsMask. Tous les indicateurs sont évalués à l’aide d’une opération AND au niveau du bit. Autrement dit, un indicateur particulier n’est effectif pour une paire d’appareils d’un réseau donné que s’il est activé à trois endroits : dans la configuration réseau et dans les options de masque local respectives des deux appareils. Même si la configuration réseau autorise la forme de connectivité directe entre pairs concernée, chacun des deux appareils peut refuser indépendamment la divulgation d’adresse IP et les tentatives de connexion directe entre eux en n’activant pas l’indicateur dans l’option de masque de son appareil local. Dans les versions de la bibliothèque qui prennent en charge la connectivité directe entre pairs, la valeur PartyOption::LocalDeviceDirectPeerConnectivityOptionsMask autorise par défaut toutes les connexions directes entre pairs activées par les réseaux. Vous n’avez donc besoin de la configurer que si vous avez des exigences propres à l’appareil visant à empêcher tout ou partie de la connectivité directe entre pairs impliquant l’appareil local.
L’exemple suivant montre comment limiter la connectivité directe entre pairs pour l’appareil local afin qu’il ne tente d’établir une connectivité directe qu’avec des appareils de la même plateforme.
Évaluation du type de connexion et de la latence
Vous pouvez déterminer si l’appareil local a établi une connexion pair à pair directe avec un appareil distant spécifique en appelantPartyNetwork::GetDeviceConnectionType().
Nous vous recommandons de ne pas imposer activement la disponibilité d’une connexion pair à pair directe pour une paire d’appareils donnée (c’est-à-dire de ne pas appeler PartyNetwork::LeaveNetwork() si PartyNetwork::GetDeviceConnectionType() signale une valeur autre que PartyDeviceConnectionType::DirectPeerConnection), car la méthode de transmission sous-jacente utilisée ne modifie pas la capacité logique globale de communication. Si la conception de votre jeu impose des exigences strictes de latence maximale des messages qui favorisent la connectivité directe entre pairs, il est préférable d’agir en fonction des observations concrètes actuelles de cette latence, telles que rapportées par la statistique PartyEndpointStatistic::AverageDeviceRoundTripLatencyInMilliseconds, plutôt que de faire des hypothèses abstraites basées sur le mécanisme de transmission. Sinon, vous risquez de gêner continuellement des utilisateurs qui essaient de jouer avec le même groupe d’amis et qui doivent toujours utiliser des serveurs de relais infonuagique transparents proches en raison de facteurs environnementaux indépendants de leur volonté.
L’exemple suivant montre comment examiner la latence aller-retour d’un localEndpoint vers un remoteEndpoint dans un network.
