Configurando o comportamento de transporte
Os recursos de rede do PlayFab Party ampliam os recursos do User Datagram Protocol (UDP) da plataforma nativa para fornecer mecanismos de transporte de datagramas ideais para jogos multijogador em tempo real. Enquanto o Transmission Control Protocol (TCP) fornece fluxos confiáveis e o UDP fornece datagramas não confiáveis, você pode configurar o comportamento de rede do Party por datagrama. Ao usar PartyLocalEndpoint::SendMessage para transmitir um datagrama de um ponto de extremidade local do Party para um ponto de extremidade remoto, especifique PartySendMessageOptions para ajustar o comportamento de transporte desejado. Os recursos incluem:- Entrega garantida: o sinalizador
GuaranteedDeliverygarante que a mensagem chegue a todos os destinos, retransmitindo dados implicitamente, se necessário, para atenuar a perda de pacotes do ambiente. Esse sinalizador de opção funciona bem ao enviar informações de estado importantes que sempre devem chegar ao destino ou, caso contrário, o destino deve ser removido da rede. A opção padrão éBestEffortDelivery, que fornece um comportamento do tipo “disparar e esquecer”, semelhante ao UDP. - Entrega sequencial: ordena a entrega da mensagem em relação a outras mensagens enviadas sequencialmente deste ponto de extremidade local para o ponto de extremidade de destino. Use esse sinalizador de opção para enviar informações de estado que devem chegar ao destino em uma sequência específica. A entrega sequencial pode resultar em uma eficiência de rede um pouco menor e em uma espera mais longa para receber todos os pacotes quando há perda ou reordenação de pacotes pelo ambiente. Usar
SequentialDeliverycomGuaranteedDeliverypode fazer com que as mensagens fiquem enfileiradas no ponto de extremidade de destino enquanto aguardam a chegada de mensagens sequenciais enviadas anteriormente. O enfileiramento pode aumentar a latência percebida durante a perda ou reordenação de pacotes no ambiente, mas o ponto de extremidade de destino sempre vê todas as mensagens na ordem em que foram enviadas. Essa compensação de desempenho é comum em protocolos semelhantes ao TCP e às vezes é chamada de bloqueio de cabeça de fila. - Agrupamento: a biblioteca do Party fragmenta e remonta automaticamente mensagens grandes que excedem o tamanho máximo com suporte do ambiente, para que os chamadores não precisem gerenciar a fragmentação. Se você estiver enviando muitos datagramas pequenos, o agrupamento os combina em um único pacote para melhorar a eficiência da largura de banda, ao custo potencial de latência adicional. Enviar com o sinalizador
CoalesceOpportunistically(o padrão) agrupa a mensagem com outras mensagens enfileiradas, se houver alguma disponível, mas não espera por mais se a mensagem puder ser transmitida imediatamente. Enviar com o sinalizadorAlwaysCoalesceUntilFlushedatrasa a transmissão até quePartyLocalEndpoint::FlushMessagesseja chamado; nesse momento, as mensagens enfileiradas são agrupadas e transmitidas.

Combinando opções de entrega e sequenciamento
As opçõesGuaranteedDelivery/BestEffortDelivery e SequentialDelivery/NonsequentialDelivery são independentes e podem ser combinadas livremente. Cada combinação produz um comportamento distinto:
Entendendo o bloqueio de cabeça de fila
O bloqueio de cabeça de fila acontece quando uma mensagem no início de uma sequência de entrega ainda não está disponível. As mensagens posteriores na mesma sequência não podem ser entregues ao aplicativo, mesmo que o destinatário já as tenha. A opção relevante para o bloqueio de cabeça de fila éSequentialDelivery, não GuaranteedDelivery. A entrega sequencial cria uma sequência ordenada em que as mensagens anteriores bloqueiam as posteriores. GuaranteedDelivery pode exagerar o impacto, porque uma mensagem ausente precisa ser retransmitida em vez de ignorada, o que prolonga a espera. Com BestEffortDelivery + SequentialDelivery, uma lacuna é ignorada e a sequência avança, portanto a janela de bloqueio é curta.
As mensagens NonsequentialDelivery nunca são bloqueadas por mensagens sequenciais. Os dois modos de entrega não interferem um no outro. Uma mensagem sequencial garantida em retransmissão não atrasa a entrega de uma mensagem não sequencial.
Orientações práticas
Um padrão comum em jogos usa várias opções de envio simultaneamente para diferentes tipos de dados:GuaranteedDelivery+SequentialDeliverypara alterações de estado do jogo em que a ordenação e a integridade importam (por exemplo, atualizações de inventário, transições de estado da partida).BestEffortDelivery+NonsequentialDeliverypara estados que mudam rapidamente, em que a baixa latência importa mais do que a integridade (por exemplo, posições dos jogadores, direção da mira).
Várias sequências independentes
Cada ponto de extremidade local representa um espaço de sequência independente. Todas as mensagens sequenciais enviadas de um ponto de extremidade local para um determinado ponto de extremidade de destino compartilham as mesmas garantias de ordenação. O bloqueio de cabeça de fila dentro dessa sequência só pode afetar outras mensagens sequenciais na mesma sequência. Se você precisar de vários fluxos ordenados independentes entre os mesmos dois dispositivos (por exemplo, um fluxo por subsistema do jogo), poderá criar vários pontos de extremidade locais em cada dispositivo (até o limite especificado emPartyNetworkConfiguration.maxEndpointsPerDeviceCount quando a rede do Party é criada). As mensagens sequenciais enviadas de pontos de extremidade locais diferentes não têm nenhuma relação de ordenação ou de entrega entre si.
