1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【C#】SignalRの使い方(公式チュートリアル後向け)

Posted at

リアルタイムアプリを作成するのに使用できる 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 を使うことで、リアルタイムな通信機能を簡単に実装できます。
型指定やグループ管理など、用途に応じて柔軟に設計できるのが特徴です。

この記事が皆様のコーディングライフの助けになれば幸いです。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?