PlayFab Party e conexões ponto a ponto diretas
Esta página explica como você pode habilitar e usar conexões ponto a ponto diretas no PlayFab Party usando código de jogo de exemplo. Ela também inclui considerações para ajudar você a avaliar quando usar conexões ponto a ponto diretas nos seus jogos.Quando usar conexões ponto a ponto diretas
O PlayFab Party dá suporte a uma grande variedade de topologias de comunicação. Conceitualmente, todas as mensagens de chat ou de dados vão de um dispositivo ou usuário par diretamente para os outros. No entanto, o Party usará automaticamente um serviço transparente de retransmissão na nuvem para evitar problemas comuns de ambiente e de segurança ao estabelecer conexões ponto a ponto diretas. Você pode obter transmissão de dados com baixa latência aproveitando as medições de qualidade de serviço (QoS) em segundo plano desse serviço. (Para obter mais informações, confira Medições de QoS do PlayFab Party.) Opcionalmente, você pode habilitar conexões ponto a ponto diretas para reduzir ainda mais a latência da transmissão de dados. Devido às preocupações de segurança detalhadas em “Considerações de segurança” abaixo, a Microsoft recomenda que você use nosso serviço de retransmissão na nuvem em vez de habilitar a conexão ponto a ponto direta, a menos que seu título tenha requisitos rigorosos de latência.Suporte a plataformas
A conectividade ponto a ponto direta tem suporte nas versões da biblioteca do Party para Windows 10, Microsoft Game Core, Nintendo Switch, PlayStation®4 e PlayStation®5. Outras versões da biblioteca sempre usarão a retransmissão na nuvem para a transmissão de dados, independentemente das opções de conectividade ponto a ponto direta especificadas por meio da API do cliente. “PlayStation” é uma marca registrada ou marca comercial da Sony Interactive Entertainment Inc.Considerações de segurança
Como a conectividade ponto a ponto direta é usada para enviar dados diretamente entre clientes, todos os clientes precisam saber como se conectar uns aos outros. Isso é feito compartilhando os endereços IP dos clientes entre os clientes de uma mesma sessão de jogo. Por exemplo, se um jogo multijogador de 16 jogadores usar conectividade ponto a ponto direta para atualizar as posições dos jogadores, cada um dos 16 clientes do jogo precisará saber os endereços IP dos outros 15 clientes para saber para quem enviar os dados. Compartilhar endereços IP entre clientes de jogo é um risco de segurança. Compartilhar endereços IP pode permitir que pessoas mal-intencionadas detectem o endereço IP e o usem para atacar outros jogadores fora dos jogos. Um método comum para realizar esses ataques é por meio de ataques de negação de serviço (DoS) ou de uma variação chamada ataques de negação de serviço distribuída (DDoS). Os ataques funcionam tentando sobrecarregar uma rede com tráfego de rede supérfluo. Se um invasor conseguir enviar tráfego de rede suficiente para a vítima, o hardware de rede da vítima (modem e roteador) terá de gastar todo o seu tempo processando o tráfego supérfluo e não terá tempo para realizar seu trabalho normal de processar conexões de rede legítimas. Na prática, isso significa que a vítima não pode usar sua rede durante todo o ataque. Isso costuma ser chamado de “ser derrubado da internet”. Em conclusão, uma conectividade ponto a ponto direta bem-sucedida pode proporcionar menor latência entre alguns dispositivos. No entanto, tentar estabelecê-la também exige que os usuários divulguem seus endereços IP a outras pessoas, o que pode permitir que usuários mal-intencionados ataquem seus dispositivos e conexões com a Internet fora do título. A conexão ponto a ponto direta também pode não ser permitida em determinadas plataformas por motivos de política. Certifique-se de usar as opções de conectividade ponto a ponto direta apropriadas para seus objetivos de desempenho e segurança. Se você decidir usar a conectividade ponto a ponto direta depois de ponderar os riscos, use os exemplos a seguir para habilitá-la no seu título por rede e por dispositivo.Cenários de LAN
A conectividade ponto a ponto direta no Party pode ser usada para permitir latência extremamente baixa em cenários de LAN. Mesmo nesses cenários, no entanto, é necessária uma conectividade limitada com a Internet para dar suporte à autenticação de usuários, aos dados e insights de LiveOps e aos recursos de acessibilidade do chat de voz.Considerações sobre a largura de banda de upload
O uso da conectividade ponto a ponto direta pode aumentar o uso de largura de banda de upload do seu jogo. Ao transmitir uma mensagem de jogo ou de voz por meio do serviço de retransmissão na nuvem, o Party envia uma única mensagem ao serviço; o serviço então replica e encaminha a mensagem para cada dispositivo de destino. Ao transmitir uma mensagem de jogo ou de voz por meio de conexões ponto a ponto diretas, o Party replica e envia a mensagem por uma conexão direta para cada dispositivo de destino com o qual uma conexão ponto a ponto direta tenha sido estabelecida. Portanto, o uso de largura de banda de upload do seu jogo aumentará proporcionalmente ao número de dispositivos com os quais uma conexão ponto a ponto direta tenha sido estabelecida. Avalie se esse aumento na largura de banda de upload é aceitável para o seu jogo antes de habilitar as conexões ponto a ponto diretas.Como usar conexões ponto a ponto diretas no seu jogo
Habilitando conexões ponto a ponto diretas na sua rede
Ao criar uma rede por meio dePartyManager::CreateNewNetwork(), você pode especificar vários parâmetros de configuração de rede por meio da PartyNetworkConfiguration fornecida à chamada. Você pode usar o campo PartyNetworkConfiguration::directPeerConnectivityOptions para especificar se e como a conectividade ponto a ponto direta tem suporte para os dispositivos da rede.
O exemplo a seguir mostra uma configuração de rede que especifica que conexões ponto a ponto diretas devem ser tentadas entre todos os dispositivos da rede, independentemente do tipo de plataforma ou do provedor de login.
O estabelecimento da conectividade ponto a ponto direta é feito com base no melhor esforço e pode não ser possível devido a fatores do ambiente, a opções de conectividade por dispositivo ou à política da plataforma. Para obter mais informações sobre como avaliar se uma conexão ponto a ponto direta foi estabelecida com um determinado dispositivo, confira Avaliando o tipo de conexão e a latência.
Restringindo a conectividade ponto a ponto direta por dispositivo
Além das opções de conectividade ponto a ponto direta na configuração da rede, a conectividade ponto a ponto direta pode ser ainda mais restringida por um dispositivo em todas as redes nas quais ele se autentica, usandoPartyManager::SetOption() para definir PartyOption::LocalDeviceDirectPeerConnectivityOptionsMask. Todos os sinalizadores são avaliados usando uma operação AND bit a bit. Ou seja, um determinado sinalizador só entra em vigor para um par de dispositivos de uma rede se estiver habilitado em três lugares: na configuração da rede e nas respectivas opções de máscara local de ambos os dispositivos. Mesmo que a configuração da rede permita a conectividade ponto a ponto direta da forma relevante, qualquer um dos dispositivos pode, de forma independente, recusar a divulgação do endereço IP e as tentativas de conexão direta entre eles não habilitando o sinalizador na opção de máscara do dispositivo local. Nas versões da biblioteca que dão suporte à conectividade ponto a ponto direta, o valor de PartyOption::LocalDeviceDirectPeerConnectivityOptionsMask permite, por padrão, todas as conexões ponto a ponto diretas habilitadas pelas redes. Portanto, você só precisa configurá-lo se tiver requisitos específicos do dispositivo para impedir parte ou toda a conectividade ponto a ponto direta que envolva o dispositivo local.
O exemplo a seguir mostra como restringir a conectividade ponto a ponto direta do dispositivo local para que ele só tente estabelecer conectividade ponto a ponto direta com dispositivos da mesma plataforma.
Avaliando o tipo de conexão e a latência
Você pode determinar se o dispositivo local estabeleceu uma conexão ponto a ponto direta com um dispositivo remoto específico chamandoPartyNetwork::GetDeviceConnectionType().
Recomendamos que você não imponha ativamente a disponibilidade de uma conexão ponto a ponto direta para nenhum par de dispositivos (ou seja, não chame PartyNetwork::LeaveNetwork() se PartyNetwork::GetDeviceConnectionType() relatar um valor diferente de PartyDeviceConnectionType::DirectPeerConnection), pois o método de transmissão subjacente específico em uso não altera a capacidade lógica geral de comunicação. Se o design do seu jogo tiver requisitos rigorosos de latência máxima de mensagens que incentivem a conectividade ponto a ponto direta, é melhor agir com base nas observações concretas atuais dessa latência, conforme relatadas pela estatística PartyEndpointStatistic::AverageDeviceRoundTripLatencyInMilliseconds, em vez de fazer suposições abstratas com base no mecanismo de transmissão. Caso contrário, você poderá prejudicar continuamente usuários que tentam jogar com o mesmo grupo de amigos e que sempre precisam usar servidores transparentes de retransmissão na nuvem próximos devido a fatores do ambiente fora do controle deles.
O exemplo a seguir mostra como inspecionar a latência de ida e volta de um localEndpoint para um remoteEndpoint em uma network.
