PlayFab Party y conexiones directas de punto a punto
En esta página se explica cómo puede habilitar y usar conexiones directas de punto a punto en PlayFab Party mediante código de juego de ejemplo. También incluye consideraciones para ayudarle a evaluar cuándo usar conexiones directas de punto a punto en sus juegos.Cuándo usar conexiones directas de punto a punto
PlayFab Party admite una amplia variedad de topologías de comunicación. Conceptualmente, todos los mensajes de chat o de datos van de un dispositivo o usuario del mismo nivel directamente a otros. Sin embargo, Party aprovechará automáticamente un servicio transparente de retransmisión en la nube para evitar los problemas comunes de entorno y seguridad al establecer conexiones directas de punto a punto. Puede lograr una transmisión de datos de baja latencia aprovechando sus mediciones de calidad de servicio (QoS) en segundo plano. (Para obtener más información, consulte Mediciones de QoS de PlayFab Party.) Opcionalmente, puede habilitar conexiones directas de punto a punto para reducir aún más la latencia de la transmisión de datos. Debido a los problemas de seguridad detallados en “Consideraciones de seguridad” a continuación, Microsoft recomienda que use nuestro servicio de retransmisión en la nube en lugar de habilitar la conexión directa de punto a punto, a menos que su título tenga requisitos estrictos de latencia.Compatibilidad de plataformas
La conectividad directa de punto a punto se admite en las versiones de la biblioteca de Party para Windows 10, Microsoft Game Core, Nintendo Switch, PlayStation®4 y PlayStation®5. Otras versiones de la biblioteca siempre usarán la retransmisión en la nube para la transmisión de datos, independientemente de las opciones de conectividad directa de punto a punto especificadas a través de la API de cliente. “PlayStation” es una marca registrada o marca comercial de Sony Interactive Entertainment Inc.Consideraciones de seguridad
Dado que la conectividad directa de punto a punto se usa para enviar datos directamente entre clientes, todos los clientes necesitan saber cómo conectarse entre sí. Esto se hace compartiendo las direcciones IP de los clientes entre los clientes de una sesión de juego. Por ejemplo, si un juego multijugador de 16 jugadores usa conectividad directa de punto a punto para actualizar las posiciones de los jugadores, cada uno de los 16 clientes del juego necesita conocer las direcciones IP de los otros 15 clientes para saber a quién enviar los datos. Compartir direcciones IP entre clientes del juego es un riesgo de seguridad. Compartir direcciones IP puede permitir que actores malintencionados detecten la dirección IP y la usen para atacar de forma malintencionada a otros jugadores fuera de los juegos. Un método común para llevar a cabo estos ataques es a través de ataques de denegación de servicio (DOS), o una variación denominada ataques de denegación de servicio distribuido (DDOS). Los ataques funcionan intentando saturar una red con tráfico de red superfluo. Si un atacante puede enviar suficiente tráfico de red a su víctima, el hardware de red de la víctima (módem y enrutador) tiene que dedicar todo su tiempo a procesar el tráfico superfluo y no tiene tiempo para realizar su trabajo normal de procesar las conexiones de red legítimas. En la práctica, esto significa que la víctima no puede usar su red durante toda la duración del ataque. Con frecuencia, esto se conoce como quedar “expulsado sin conexión”. En conclusión, una conectividad directa de punto a punto correcta puede proporcionar una latencia menor entre algunos dispositivos. Sin embargo, intentar establecerla también requiere que los usuarios revelen sus direcciones IP a otros, lo que puede permitir que usuarios malintencionados ataquen sus dispositivos y conexiones a Internet fuera del título. La conexión directa de punto a punto tampoco puede estar permitida en determinadas plataformas por motivos de directiva. Asegúrese de usar las opciones de conectividad directa de punto a punto adecuadas para sus objetivos de rendimiento y seguridad. Si decide usar la conectividad directa de punto a punto después de sopesar los riesgos, use los ejemplos siguientes para habilitar su título por red y por dispositivo.Escenarios de LAN
La conectividad directa de punto a punto en Party se puede usar para habilitar una latencia extremadamente baja en escenarios de LAN. Sin embargo, incluso en estos escenarios, se requiere una conectividad limitada a Internet para admitir la autenticación de usuarios, los datos e información de LiveOps y las características de accesibilidad del chat de voz.Consideraciones sobre el ancho de banda de subida
El uso de la conectividad directa de punto a punto puede aumentar el uso del ancho de banda de subida de su juego. Al transmitir un mensaje de juego o de voz a través del servicio de retransmisión en la nube, Party envía un solo mensaje al servicio; a continuación, el servicio replica y reenvía el mensaje a cada dispositivo de destino. Al transmitir un mensaje de juego o de voz a través de conexiones directas de punto a punto, Party replica y envía el mensaje a través de una conexión directa para cada dispositivo de destino con el que se haya establecido una conexión directa de punto a punto. Por lo tanto, el uso del ancho de banda de subida de su juego se escalará proporcionalmente con el número de dispositivos con los que se haya establecido una conexión directa de punto a punto. Considere si este aumento en el ancho de banda de subida es aceptable para su juego antes de habilitar las conexiones directas de punto a punto.Cómo usar conexiones directas de punto a punto en su juego
Habilitación de conexiones directas de punto a punto en su red
Al crear una red a través dePartyManager::CreateNewNetwork(), puede especificar varios parámetros de configuración de red a través de la estructura PartyNetworkConfiguration proporcionada a la llamada. Puede usar el campo PartyNetworkConfiguration::directPeerConnectivityOptions para especificar si se admite la conectividad directa de punto a punto para los dispositivos de la red y cómo se admite.
El ejemplo siguiente muestra una configuración de red que especifica que se deben intentar conexiones directas de punto a punto entre todos los dispositivos de la red, independientemente del tipo de plataforma o del proveedor de inicio de sesión.
El establecimiento de la conectividad directa de punto a punto es de tipo mejor esfuerzo y puede no ser posible debido a factores del entorno, opciones de conectividad por dispositivo o directivas de la plataforma. Para obtener más información sobre cómo evaluar si se estableció una conexión directa de punto a punto con un dispositivo determinado, consulte Evaluación del tipo de conexión y la latencia.
Restricción de la conectividad directa de punto a punto por dispositivo
Además de las opciones de conectividad directa de punto a punto de la configuración de red, un dispositivo puede restringir aún más la conectividad directa de punto a punto para todas las redes en las que se autentica mediantePartyManager::SetOption() para establecer PartyOption::LocalDeviceDirectPeerConnectivityOptionsMask. Todas las marcas se evalúan mediante una operación AND bit a bit. Es decir, una marca determinada solo está en vigor para un par de dispositivos de una red determinada si está habilitada en tres lugares: la configuración de red y las opciones de máscara local respectivas de ambos dispositivos. Incluso si la configuración de red permite la conectividad directa de punto a punto de la forma correspondiente, cualquiera de los dispositivos puede optar de forma independiente por no participar en la divulgación de direcciones IP ni en los intentos de conexión directa entre ellos si no habilita la marca en su opción de máscara del dispositivo local. En las versiones de la biblioteca que admiten conectividad directa de punto a punto, el valor PartyOption::LocalDeviceDirectPeerConnectivityOptionsMask permite de forma predeterminada todas las conexiones directas de punto a punto habilitadas por las redes. Por lo tanto, solo necesita configurarlo si tiene requisitos específicos del dispositivo para impedir parte o toda la conectividad directa de punto a punto que implique al dispositivo local.
El ejemplo siguiente muestra cómo restringir la conectividad directa de punto a punto para el dispositivo local de modo que solo intente establecer conectividad directa de punto a punto con dispositivos de la misma plataforma.
Evaluación del tipo de conexión y la latencia
Puede determinar si el dispositivo local estableció una conexión directa de punto a punto con un dispositivo remoto específico llamando aPartyNetwork::GetDeviceConnectionType().
Le recomendamos que no imponga activamente la disponibilidad de una conexión directa de punto a punto para un par de dispositivos determinado (es decir, no llame a PartyNetwork::LeaveNetwork() si PartyNetwork::GetDeviceConnectionType() notifica un valor distinto de PartyDeviceConnectionType::DirectPeerConnection), ya que el método de transmisión subyacente específico en uso no altera la capacidad lógica general de comunicación. Si el diseño de su juego tiene requisitos estrictos de latencia máxima de mensajes que fomenten la conectividad directa de punto a punto, es mejor actuar sobre las observaciones concretas actuales de esa latencia según lo notificado por la estadística PartyEndpointStatistic::AverageDeviceRoundTripLatencyInMilliseconds en lugar de hacer suposiciones abstractas basadas en el mecanismo de transmisión. De lo contrario, podría obstaculizar continuamente a los usuarios que intentan jugar con el mismo conjunto de amigos y que siempre necesitan usar servidores transparentes de retransmisión en la nube cercanos debido a factores del entorno fuera de su control.
El ejemplo siguiente muestra cómo inspeccionar la latencia de ida y vuelta desde un localEndpoint hasta un remoteEndpoint en una network.
