> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Utilisation des connexions pair à pair directes

> Activez la connectivité directe entre pairs dans PlayFab Party pour réduire la latence en acheminant le trafic directement entre les points de terminaison plutôt que via le relais cloud transparent.

# 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 chat ou de données vont directement d'un appareil ou utilisateur pair vers les autres. Cependant, Party utilise automatiquement un service de relais cloud 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](https://docs.xbox.com/fr/services/playfab/multiplayer/networking/concepts-regions.md).) 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 cloud 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 cloud pour la transmission des données, quelles que soient les options de connectivité directe entre pairs spécifiées via 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. Veillez à 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 chat 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 via le service de relais cloud, 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 via des connexions pair à pair directes, Party réplique le message et l'envoie via 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 via [`PartyManager::CreateNewNetwork()`](https://docs.xbox.com/fr/services/playfab/multiplayer/networking/reference/classes/PartyManager/methods/partymanager_createnewnetwork), vous pouvez spécifier divers paramètres de configuration réseau via la structure [`PartyNetworkConfiguration`](https://docs.xbox.com/fr/services/playfab/multiplayer/networking/reference/structs/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.

```cpp theme={null}
PartyNetworkConfiguration configuration = {};
configuration.directPeerConnectivityOptions = PartyDirectPeerConnectivityOptions::AnyPlatformType | PartyDirectPeerConnectivityOptions::AnyEntityLoginProvider;
// Initialize the rest of the network configuration parameters appropriately for your game before using.
```

Dans le cadre de l'authentification réussie d'un premier utilisateur dans un réseau, un appareil peut tenter d'établir des connexions pair à pair directes avec d'autres appareils participant déjà au réseau, lorsque la configuration réseau le permet. Pour les tentatives réussies, les messages de points de terminaison et les données de chat entre les appareils sont transmis via ces connexions directes. Pour les tentatives qui échouent en raison d'incompatibilités environnementales entre les appareils, toutes les communications entre ces appareils sont transmises via des serveurs de relais cloud transparents. Si la configuration réseau n'autorise pas les appareils à tenter des connexions directes entre pairs, ceux-ci n'échangent jamais d'informations d'adresse IP et transmettent toujours les messages de points de terminaison et les données de chat via des serveurs de relais cloud transparents.

> [!NOTE]
>
> 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](#evaluating-the-connection-type-and-latency).

### 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 utilisant [`PartyManager::SetOption()`](https://docs.xbox.com/fr/services/playfab/multiplayer/networking/reference/classes/PartyManager/methods/partymanager_setoption) pour définir [`PartyOption::LocalDeviceDirectPeerConnectivityOptionsMask`](https://docs.xbox.com/fr/services/playfab/multiplayer/networking/reference/enums/partyoption). 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.

```cpp theme={null}
PartyDirectPeerConnectivityOptions localDeviceMask = PartyDirectPeerConnectivityOptions::SamePlatformType | PartyDirectPeerConnectivityOptions::AnyEntityLoginProvider;
PartyError error = PartyManager::GetSingleton().SetOption(nullptr, PartyOption::LocalDeviceDirectPeerConnectivityOptionsMask, &localDeviceMask);
if (PARTY_FAILED(error))
{
    printf("Failed to set local device direct peer connectivity options mask! error = 0x%08x\n", error);
}
```

### É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 appelant [`PartyNetwork::GetDeviceConnectionType()`](https://docs.xbox.com/fr/services/playfab/multiplayer/networking/reference/classes/PartyNetwork/methods/partynetwork_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()`](https://docs.xbox.com/fr/services/playfab/multiplayer/networking/reference/classes/PartyNetwork/methods/partynetwork_leavenetwork) si PartyNetwork::GetDeviceConnectionType() signale une valeur autre que [`PartyDeviceConnectionType::DirectPeerConnection`](https://docs.xbox.com/fr/services/playfab/multiplayer/networking/reference/enums/partydeviceconnectiontype)), 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`](https://docs.xbox.com/fr/services/playfab/multiplayer/networking/reference/enums/partyendpointstatistic), 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 cloud 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`.

```cpp theme={null}
// A helper for inspecting the connection type and average round trip latency between a local endpoint and a remote
// endpoint in a network.
void PrintConnectionTypeAndLatency(
    PartyNetwork* network,
    PartyLocalEndpoint* localEndpoint,
    PartyEndpoint* remoteEndpoint
    )
{
    // Retrieve the device associated with the remote endpoint.
    PartyDevice* remoteDevice;
    PartyError error = remoteEndpoint->GetDevice(&remoteDevice);
    if (PARTY_FAILED(error))
    {
        printf("Failed to get the remote device! error = 0x%08x\n", error);
        return;
    }

    // Get the device connection type.
    PartyDeviceConnectionType connectionType;
    PartyError error = network->GetDeviceConnectionType(remoteDevice, &connectionType);
    if (PARTY_FAILED(error))
    {
        printf("Failed to get device connection type! error = 0x%08x\n", error);
        return;
    }

    // Retrieve the latency statistic.
    PartyEndpointStatistic latencyStatistic = PartyEndpointStatistic::AverageDeviceRoundTripLatencyInMilliseconds;
    uint64_t latencyStatisticValue;
    error = localEndpoint->GetEndpointStatistics(
        1,                       // targetEndpointCount
        &remoteEndpoint,         // targetEndpoints
        1,                       // statisticCount
        &latencyStatistic,       // statisticTypes
        &latencyStatisticValue); // statisticValues
    if (PARTY_FAILED(error))
    {
        printf("Failed to get latency statistic! error = 0x%08x\n", error);
        return;
    }

    // Print the results.
    printf("Local endpoint 0x%p and remote endpoint 0x%p in network 0x%p have average round trip latency %llu ms and device connection type %i\n",
        localEndpoint,
        remoteEndpoint,
        network,
        latencyStatisticValue,
        static_cast<int32_t>(connectionType));
}
```

### Changements de type de connexion

Il est possible que l'évolution des conditions environnementales perturbe une connexion directe entre pairs au point de la rendre inutilisable pour PlayFab Party.
Dans ce cas, les appareils tentent de revenir à une communication via le serveur de relais cloud. Si la communication relayée est toujours possible, la fonction [PartyNetwork::GetDeviceConnectionType()](https://docs.xbox.com/fr/services/playfab/multiplayer/networking/reference/classes/PartyNetwork/methods/partynetwork_getdeviceconnectiontype.md) commence à signaler [PartyDeviceConnectionType::RelayServer](https://docs.xbox.com/fr/services/playfab/multiplayer/networking/reference/enums/partydeviceconnectiontype.md) et les appareils restent dans le réseau Party en utilisant désormais le nouveau type de connexion. Sinon, les appareils dont la connectivité est perturbée quittent le réseau.

> [!WARNING]
>
> Les messages de chat et de jeu qui étaient encore en cours de transmission ou de réception sur la connexion directe entre pairs au moment de la perturbation peuvent ne jamais arriver, même s'ils ont été envoyés avec [PartySendMessageOptions::GuaranteedDelivery](https://docs.xbox.com/fr/services/playfab/multiplayer/networking/reference/enums/partysendmessageoptions.md), et même s'ils ne sont plus comptabilisés dans les valeurs [PartyEndpointStatistic::CurrentlyQueuedSendMessages](https://docs.xbox.com/fr/services/playfab/multiplayer/networking/reference/enums/partyendpointstatistic.md) ou [PartyEndpointStatistic::CurrentlyActiveSendMessages](https://docs.xbox.com/fr/services/playfab/multiplayer/networking/reference/enums/partyendpointstatistic.md) renvoyées par [PartyLocalEndpoint::GetEndpointStatistics()](https://docs.xbox.com/fr/services/playfab/multiplayer/networking/reference/classes/PartyLocalEndpoint/methods/partylocalendpoint_getendpointstatistics.md).

En outre, les messages transmis pendant la période de transition du type de connexion peuvent arriver dans le désordre, même s'ils ont été envoyés avec [PartySendMessageOptions::SequentialDelivery](https://docs.xbox.com/fr/services/playfab/multiplayer/networking/reference/enums/partysendmessageoptions.md).
Votre titre doit être préparé à cette possibilité de perte de données et de désordre lors de l'utilisation de connexions directes entre pairs et de ces PartySendMessageOptions.

Un type de connexion PartyDeviceConnectionType::RelayServer ne passe jamais à un autre type, que cette valeur ait été attribuée lorsque l'appareil a rejoint initialement le réseau ou après la perturbation d'une connexion directe entre pairs.

## Compteurs de facturation

Les mêmes [compteurs de facturation](https://docs.xbox.com/fr/services/playfab/pricing/meters/meters.md#party) s'appliquent aux réseaux qui utilisent des connexions pair à pair directes et aux réseaux qui utilisent le service de relais cloud. Cependant, seules les données de jeu ou vocales qui transitent par le service de relais cloud sont comptabilisées dans les compteurs **Sortie réseau** et **Voix Party**.


## Related topics

- [Démarrage rapide du plug-in Party pour Unity](https://docs.xbox.com/fr/services/playfab/multiplayer/networking/party-unity-plugin-quickstart.md)
- [Utilisation des ports et exigences de pare-feu de PlayFab Party](https://docs.xbox.com/fr/services/playfab/multiplayer/networking/concepts-port-usage.md)
- [PartyDirectPeerConnectivityOptions](https://docs.xbox.com/fr/services/playfab/multiplayer/networking/reference/enums/partydirectpeerconnectivityoptions.md)
- [Solution de contournement pour la connexion pair à pair](https://docs.xbox.com/fr/services/playfab/multiplayer/matchmaking/peer-to-peer.md)
- [Utilisation de XBOX PC Remote Tools](https://docs.xbox.com/fr/tools/tools-pc/xbox-pc-remote-tools/how-to-use-tools.md)
