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

# Hub do SignalR de mensagens em tempo real

> Conecte clientes do PlayFab Lobby e Matchmaking ao Hub do SignalR de mensagens em tempo real, incluindo a configuração de HubConnection, a codificação MsgPack e os intervalos de KeepAlive.

<Note>
  As APIs REST e SignalR documentadas aqui são mais complexas do que os SDKs de cliente. Considere usar o [SDK C++ do Lobby](/pt-BR/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pflobby/pflobby_members) ou o [SDK C++ do Matchmaking](/pt-BR/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pfmatchmaking/pfmatchmaking_members), a menos que esses SDKs não atendam às suas necessidades.
</Note>

O recurso de mensagens em tempo real dos [serviços do Lobby e do
Matchmaking](/pt-BR/services/playfab/multiplayer/lobby/lobby-and-matchmaking) funciona por meio de um
[serviço SignalR](https://learn.microsoft.com/en-us/aspnet/core/signalr), que expõe
um [Hub do SignalR](https://learn.microsoft.com/en-us/aspnet/core/signalr/introduction#hubs). Esse
Hub do SignalR pode ser usado pelos clientes de jogo para receber mensagens sobre os [recursos
que eles assinaram](/pt-BR/services/playfab/multiplayer/real-time-messages/subscribing-to-resources).

## Conectando-se ao Hub do SignalR

A primeira etapa para receber mensagens em tempo real é criar um [cliente
SignalR](https://learn.microsoft.com/en-us/aspnet/core/signalr/client-features). O
cliente pode criar uma conexão com o Hub do SignalR [instanciando uma
HubConnection](https://learn.microsoft.com/en-us/aspnet/core/signalr/dotnet-client#connect-to-a-hub)
com a seguinte API: [API REST Negotiate do
SignalR](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/pub-sub/negotiate).
Essa API implementa a API Negotiate descrita [na documentação do
SignalR](https://github.com/dotnet/aspnetcore/blob/main/src/SignalR/docs/specs/TransportProtocols.md#post-endpoint-basenegotiate-request).

<Warning>
  O uso da [codificação MessagePack (MsgPack)](https://github.com/dotnet/aspnetcore/blob/main/src/SignalR/docs/specs/HubProtocol.md#messagepack-msgpack-encoding) ao se conectar ao Hub do SignalR é altamente recomendado e, no futuro, será imposto como a única codificação com suporte.
</Warning>

<Info>
  O cliente **deve** definir `KeepAliveInterval` como **5 segundos** ao criar a `HubConnection`. O serviço de back-end atingirá o tempo limite e fechará as conexões que não receberem um ping de keep-alive em até **10 segundos**. O `KeepAliveInterval` padrão do SignalR, de 15 segundos, é lento demais e causará desconexões. `csharp var connection = new HubConnectionBuilder() .WithUrl(hubUrl, options => { /* auth headers */ }) .WithKeepAliveInterval(TimeSpan.FromSeconds(5)) .Build(); ` Para obter mais detalhes sobre a configuração do cliente SignalR, consulte a [documentação de configuração do SignalR](https://learn.microsoft.com/en-us/aspnet/core/signalr/configuration#configure-client-options).
</Info>

<Note>
  1. As implementações de cliente do SignalR esperam que a URL omita a parte `/negotiate` desse caminho (por exemplo, a HubConnection deve ser criada para uma URL que termine em `...playfabapi.com/pubsub`). 1. Os cabeçalhos de autenticação necessários para chamar essa API podem ser passados ao cliente SignalR por meio de `HttpConnectionOptions`, como [visto neste método](https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.signalr.client.hubconnectionbuilderhttpextensions.withurl#microsoft-aspnetcore-signalr-client-hubconnectionbuilderhttpextensions-withurl\(microsoft-aspnetcore-signalr-client-ihubconnectionbuilder-system-string-system-action\(\(microsoft-aspnetcore-http-connections-client-httpconnectionoptions\)\)\)).
</Note>

## Implementando métodos de cliente para receber mensagens

Consulte a [documentação do cliente SignalR sobre a implementação de métodos
de cliente](https://learn.microsoft.com/en-us/aspnet/core/signalr/dotnet-client#call-client-methods-from-hub)
que serão invocados para receber mensagens. Os clientes devem implementar todos os
métodos listados em [Métodos de cliente](#client-methods) abaixo.

## Iniciando e encerrando uma sessão chamando métodos de servidor

Consulte a [documentação do cliente SignalR sobre como chamar métodos
de servidor](https://learn.microsoft.com/en-us/aspnet/core/signalr/dotnet-client#call-hub-methods-from-client)
para gerenciar sua sessão. Por exemplo, depois de se conectar ao hub, você deve chamar
[StartOrRecoverSession](/pt-BR/services/playfab/multiplayer/real-time-messages/server-methods/start-or-recover-session) para receber um
`connection handle` que pode ser usado para [assinar
recursos](/pt-BR/services/playfab/multiplayer/real-time-messages/subscribing-to-resources). Da mesma forma, quando terminar a
sessão, chame [EndSession](/pt-BR/services/playfab/multiplayer/real-time-messages/server-methods/end-session).

## Assinando recursos

Depois que uma sessão for iniciada com
[StartOrRecoverSession](/pt-BR/services/playfab/multiplayer/real-time-messages/server-methods/start-or-recover-session), você poderá usar
o `connection handle` retornado para começar a [assinar
recursos](/pt-BR/services/playfab/multiplayer/real-time-messages/subscribing-to-resources) e receber mensagens.

## APIs

<a id="client-methods" />

### Métodos de cliente

| Nome | Descrição |
| - | - |
| [ReceiveMessage](/pt-BR/services/playfab/multiplayer/real-time-messages/client-methods/receive-message) | Recebe uma mensagem. |
| [ReceiveSubscriptionChangeMessage](/pt-BR/services/playfab/multiplayer/real-time-messages/client-methods/receive-subscription-change-message) | Recebe uma SubscriptionChangeMessage para acompanhar as assinaturas atuais. |

### Métodos de servidor

| Nome | Descrição |
| - | - |
| [StartOrRecoverSession](/pt-BR/services/playfab/multiplayer/real-time-messages/server-methods/start-or-recover-session) | Inicia ou recupera uma sessão. |
| [EndSession](/pt-BR/services/playfab/multiplayer/real-time-messages/server-methods/end-session) | Encerra a sessão. |

#### Métodos de sessão compartilhada

| Nome | Descrição |
| - | - |
| [AddEntityToSession](/pt-BR/services/playfab/multiplayer/real-time-messages/server-methods/add-entity-to-session) | Para cenários em que várias entidades estão conectadas ao mesmo dispositivo. Adiciona uma entidade extra à sessão para receber mensagens de várias entidades locais em uma sessão compartilhada. |
| [RemoveEntityFromSession](/pt-BR/services/playfab/multiplayer/real-time-messages/server-methods/remove-entity-from-session) | Remove uma entidade da sessão. |

## Confira também

* [Assinando recursos](/pt-BR/services/playfab/multiplayer/real-time-messages/subscribing-to-resources)
* [Mensagens em tempo real para as APIs do Lobby e do Matchmaking](/pt-BR/services/playfab/multiplayer/real-time-messages/overview)


## Related topics

- [Tipo de mensagens em tempo real Message](/pt-BR/services/playfab/multiplayer/real-time-messages/types/message.md)
- [Assinando recursos para mensagens em tempo real](/pt-BR/services/playfab/multiplayer/real-time-messages/subscribing-to-resources.md)
- [Mensagens em tempo real para as APIs do Lobby e do Matchmaking](/pt-BR/services/playfab/multiplayer/real-time-messages/overview.md)
- [Método de servidor EndSession do SignalR](/pt-BR/services/playfab/multiplayer/real-time-messages/server-methods/end-session.md)
- [Método de cliente ReceiveMessage do SignalR](/pt-BR/services/playfab/multiplayer/real-time-messages/client-methods/receive-message.md)
