リアルタイムアプリを作成するのに使用できる SignalR。Teams ライクなアプリを作成するのに調べた内容をまとめます。
この記事の内容としては公式チュートリアルをやったうえで実際に、アプリを作成するようなケースで必要になるであろう内容になります。
1. SignalR とは
SignalR は ASP.NET Core でリアルタイム Web 機能を簡単に実装できるライブラリです。チャットや通知、ライブ更新などに利用されます。
2. 基本的な使い方
公式チュートリアル(Blazor での SignalR チュートリアル)では、すべてのユーザーが 1 つのハブに接続し、全員で 1 つのチャットを見ているイメージです。
3. メッセージ送信メソッドの型指定
通常、メッセージ送信は以下のように文字列でメソッド名を指定します。
await _hubConnection.SendAsync("Broadcast", username, message);
この方法だとタイポなどのエラーは実行時にしか分かりません。そこで、インターフェースを実装することで厳密な型指定が可能です。詳細は公式ドキュメント(Strongly typed hubs)を参照してください。
4. グループごとの切り替え
チャットアプリでは、目的に応じてグループを作成し、ハブを分けて通知を受け取らないようにできます。
公式ドキュメント(グループ管理)も参考になります。
Hub のグループにあらかじめ追加しておいて、メッセージ送信時に All
ではなく Group
を指定することで、特定グループだけに通知できます。
// グループ追加メソッド
public async Task AddToGroup(string groupName)
{
await Groups.AddToGroupAsync(Context.ConnectionId, groupName);
await Clients.Group(groupName).SendAsync("Send", $"{Context.ConnectionId} has joined the group {groupName}.");
}
// 特定のグループにメッセージ送信
- await Clients.All.SendAsync("Broadcast", username, message);
+ await Clients.Group(groupId.ToString()).SendAsync("Broadcast", username, message);
まとめ
SignalR を使うことで、リアルタイムな通信機能を簡単に実装できます。
型指定やグループ管理など、用途に応じて柔軟に設計できるのが特徴です。
この記事が皆様のコーディングライフの助けになれば幸いです。
参考