> ## 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.

# リアルタイム メッセージ SignalR Hub

> HubConnection のセットアップ、MsgPack エンコード、KeepAlive 間隔などを含めて、PlayFab Lobby およびマッチメイキング クライアントをリアルタイム メッセージ用の SignalR Hub に接続します。

<Note>
  ここで説明する REST および SignalR API はクライアント SDK より複雑です。これらの SDK が要件を満たさない場合を除き、代わりに [Lobby C++ SDK](/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pflobby/pflobby_members) または [Matchmaking C++ SDK](/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pfmatchmaking/pfmatchmaking_members) の使用をご検討ください。
</Note>

[Lobby およびマッチメイキング サービス](/services/playfab/multiplayer/lobby/lobby-and-matchmaking) のリアルタイム メッセージ機能は [SignalR サービス](https://learn.microsoft.com/en-us/aspnet/core/signalr) を通じて動作し、[SignalR Hub](https://learn.microsoft.com/en-us/aspnet/core/signalr/introduction#hubs) を公開します。この SignalR Hub は、ゲーム クライアントが [サブスクライブしたリソース](/services/playfab/multiplayer/real-time-messages/subscribing-to-resources) に関するメッセージを受信するために使用できます。

## SignalR Hub への接続

リアルタイム メッセージを受信する最初の手順は、[SignalR クライアント](https://learn.microsoft.com/en-us/aspnet/core/signalr/client-features) を作成することです。クライアントは、次の API を使用して [HubConnection をインスタンス化](https://learn.microsoft.com/en-us/aspnet/core/signalr/dotnet-client#connect-to-a-hub) することで SignalR Hub への接続を作成できます。[SignalR Negotiate REST API](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/pub-sub/negotiate)。この API は、[SignalR のドキュメント](https://github.com/dotnet/aspnetcore/blob/main/src/SignalR/docs/specs/TransportProtocols.md#post-endpoint-basenegotiate-request) で説明されている Negotiate API を実装しています。

<Warning>
  SignalR Hub への接続時に [MessagePack (MsgPack) エンコード](https://github.com/dotnet/aspnetcore/blob/main/src/SignalR/docs/specs/HubProtocol.md#messagepack-msgpack-encoding) を使用することを強く推奨します。将来的にはサポートされる唯一のエンコードとして強制される予定です。
</Warning>

<Info>
  クライアントは `HubConnection` を構築する際に `KeepAliveInterval` を **5 秒** に設定する **必要があります**。バックエンド サービスは、**10 秒** 以内にキープアライブ ping を受信しなかった接続をタイムアウトして閉じます。SignalR の既定の `KeepAliveInterval` である 15 秒では遅すぎ、切断の原因となります。 `csharp var connection = new HubConnectionBuilder() .WithUrl(hubUrl, options => { /* auth headers */ }) .WithKeepAliveInterval(TimeSpan.FromSeconds(5)) .Build(); ` SignalR クライアント構成の詳細については、[SignalR 構成のドキュメント](https://learn.microsoft.com/en-us/aspnet/core/signalr/configuration#configure-client-options) を参照してください。
</Info>

<Note>
  1. SignalR クライアントの実装では、URL からこのパスの `/negotiate` 部分を省略する必要があります (たとえば、HubConnection は `...playfabapi.com/pubsub` で終わる URL に対して作成します)。 1. この API の呼び出しに必要な認証ヘッダーは、[このメソッド](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\)\)\)) で示されているように `HttpConnectionOptions` を通じて SignalR クライアントに渡すことができます。
</Note>

## メッセージを受信するクライアント メソッドの実装

メッセージを受信するために呼び出される [クライアント メソッドの実装に関する](https://learn.microsoft.com/en-us/aspnet/core/signalr/dotnet-client#call-client-methods-from-hub) SignalR クライアントのドキュメントを参照してください。クライアントは、以下の [Client methods](#client-methods) に記載されているすべてのメソッドを実装する必要があります。

## サーバー メソッドを呼び出してセッションを開始・終了する

セッションを管理するために、[サーバー メソッドの呼び出しに関する](https://learn.microsoft.com/en-us/aspnet/core/signalr/dotnet-client#call-hub-methods-from-client) SignalR クライアントのドキュメントを参照してください。たとえば、ハブに接続した後は、[StartOrRecoverSession](/services/playfab/multiplayer/real-time-messages/server-methods/start-or-recover-session) を呼び出して、[リソースをサブスクライブ](/services/playfab/multiplayer/real-time-messages/subscribing-to-resources) するために使用できる `connection handle` を取得する必要があります。同様に、セッションが終了したら [EndSession](/services/playfab/multiplayer/real-time-messages/server-methods/end-session) を呼び出します。

## リソースへのサブスクライブ

[StartOrRecoverSession](/services/playfab/multiplayer/real-time-messages/server-methods/start-or-recover-session) でセッションを開始した後、返された `connection handle` を使用して [リソースをサブスクライブ](/services/playfab/multiplayer/real-time-messages/subscribing-to-resources) し、メッセージの受信を開始できます。

## API

### クライアント メソッド

| 名前                                                                                                                                      | 説明                                                     |
| --------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ |
| [ReceiveMessage](/services/playfab/multiplayer/real-time-messages/client-methods/receive-message)                                       | メッセージを受信します。                                           |
| [ReceiveSubscriptionChangeMessage](/services/playfab/multiplayer/real-time-messages/client-methods/receive-subscription-change-message) | 現在のサブスクリプションを追跡するために SubscriptionChangeMessage を受信します。 |

### サーバー メソッド

| 名前                                                                                                                | 説明                |
| ----------------------------------------------------------------------------------------------------------------- | ----------------- |
| [StartOrRecoverSession](/services/playfab/multiplayer/real-time-messages/server-methods/start-or-recover-session) | セッションを開始または復元します。 |
| [EndSession](/services/playfab/multiplayer/real-time-messages/server-methods/end-session)                         | セッションを終了します。      |

#### 共有セッション メソッド

| 名前                                                                                                                    | 説明                                                                                                |
| --------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| [AddEntityToSession](/services/playfab/multiplayer/real-time-messages/server-methods/add-entity-to-session)           | 同一デバイスに複数のエンティティがサインインしているシナリオ用です。共有セッション上で複数のローカル エンティティに対するメッセージを受信するために、セッションに追加のエンティティを追加します。 |
| [RemoveEntityFromSession](/services/playfab/multiplayer/real-time-messages/server-methods/remove-entity-from-session) | セッションからエンティティを削除します。                                                                              |

## 関連項目

* [リソースをサブスクライブする](/services/playfab/multiplayer/real-time-messages/subscribing-to-resources)
* [Lobby およびマッチメイキング API のリアルタイム メッセージ](/services/playfab/multiplayer/real-time-messages/overview)


## Related topics

- [Message リアルタイム メッセージ型](/ja-jp/services/playfab/multiplayer/real-time-messages/types/message.md)
- [EndSessionRequest リアルタイム メッセージ型](/ja-jp/services/playfab/multiplayer/real-time-messages/types/end-session-request.md)
- [StartOrRecoverSessionRequest リアルタイム メッセージ型](/ja-jp/services/playfab/multiplayer/real-time-messages/types/start-or-recover-session-request.md)
- [リアルタイム メッセージ用のリソースへのサブスクライブ](/ja-jp/services/playfab/multiplayer/real-time-messages/subscribing-to-resources.md)
- [SubscriptionChangeMessage リアルタイム メッセージ型](/ja-jp/services/playfab/multiplayer/real-time-messages/types/subscription-change-message.md)
