ASP.NET Core SignalR の概要

ASP.NET Core SignalR は、アプリへのリアルタイム Web 機能の追加を簡略化するオープンソース ライブラリです。 リアルタイム Web 機能を使用すると、サーバー側のコードでコンテンツをクライアントに即座にプッシュできます。 ASP.NET Core アプリケーションが SignalR を利用できるシナリオは多数あります。

シナリオ Examples
サーバーからの頻度の高い更新を必要とするアプリケーション ゲーム、ソーシャル ネットワーク、投票サイト、オークション、地図、GPS
監視用のダッシュボードとアプリ 企業ダッシュボード、売上の即時更新、旅行アラート
コラボレーションをサポートするアプリ ホワイトボード アプリ、チーム会議ソフトウェア
通知を必要とするアプリ ソーシャル ネットワーク、電子メール、チャット、ゲーム、旅行のアラート

この記事では、ASP.NET Core アプリでの SignalRの操作の概要について説明します。

機能とソース コード

SignalR は、サーバーからクライアントへのリモート プロシージャ コール (RPC) を作成するための API を提供します。 RPC は、サーバー側の.NET コードからクライアントで関数を呼び出します。 サポートされているプラットフォームは複数あります。各プラットフォームには、それぞれのクライアント SDK が含まれています。 RPC 呼び出しによって呼び出されるプログラミング言語は、プラットフォームによって異なります。

ASP.NET Core の SignalR は、開発者に多くの機能を提供します。

  • 接続管理を自動的に処理する
  • 接続されているすべてのクライアントに同時にメッセージを送信する (チャット ルームなど)
  • 特定のクライアントまたはクライアント グループにメッセージを送信する
  • Azure SignalR ServiceRedis バックプレーン などのオプションを使用して、増加するトラフィックに対応できるようにスケーリングします
  • サポートされているシナリオに対するトリミングとネイティブの事前コンパイル (AOT) のサポート
  • ハブ メソッドでのポリモーフィック型の処理をサポートする
  • ActivitySource による SignalR ハブ サーバーと .NET クライアント向けの分散トレースをサポート
  • SignalR Hub プロトコルを使用する

ソースは、GitHub の ASP.NET Core リポジトリでホストされます。

Transports

SignalR では、(グレースフル フォールバックの順に) リアルタイム通信を処理するために、次の手法がサポートされています。

  • WebSockets
  • サーバー送信イベント
  • ロングポーリング

SignalR は、サーバーとクライアントの機能内で最適なトランスポート方法を自動的に選択します。 WebSocket は、一般的に最適なパフォーマンスを提供するため、推奨されるトランスポートです。

Hubs

SignalR では、"ハブ" を使用してクライアントとサーバー間で通信を行います。

ハブは、クライアントとサーバーが相互にメソッドを呼び出すために使用する高度なパイプラインです。 SignalR は、マシンの境界を越えて分散処理を自動的に行うため、クライアントがサーバー上のメソッドを呼び出すことができ、逆も実行可能です。 厳密に型指定されたパラメーターをメソッドに渡し、モデル バインドを有効にすることができます。

SignalR では、次の 2 つの組み込みハブ プロトコルがサポートされています。

  • JSON に基づくテキスト プロトコル (既定)
  • MessagePack に基づくバイナリ プロトコル。 通常、MessagePack では JSON と比較して小さいメッセージが作成されます。 詳細については、「SignalR の での MessagePack Hub Protocol の使用」を参照してください。

ハブは、クライアント側メソッドの名前とパラメーターを含むメッセージを送信することで、クライアント側コードを呼び出します。 構成されたプロトコルは、メソッド パラメーターとして送信されたオブジェクトを逆シリアル化します。 クライアントでは、名前とクライアント側コードのメソッドのマッチングが試行されます。 クライアントは、一致を見つけると、メソッドを呼び出し、逆シリアル化されたパラメーター データを渡します。

SignalR の概要

ASP.NET Core SignalR は、アプリへのリアルタイム Web 機能の追加を簡略化するオープンソース ライブラリです。 リアルタイム Web 機能を使用すると、サーバー側のコードでコンテンツをクライアントに即座にプッシュできます。

SignalR に適した候補は、次のとおりです。

  • サーバーからの頻繁な更新が必要なアプリ。 たとえば、ゲーム、ソーシャル ネットワーク、投票、オークション、マップ、GPS などのアプリです。
  • ダッシュボードと監視アプリ。 たとえば、会社のダッシュボード、売上の即時更新、トラベル アラートなどです。
  • コラボレーション アプリ。 ホワイトボード アプリとチーム会議ソフトウェアは、コラボレーション アプリの例です。
  • 通知を必要とするアプリ。 ソーシャル ネットワーク、電子メール、チャット、ゲーム、トラベル アラート、その他の多くのアプリは通知を使用します。

SignalR は、サーバーからクライアントへのリモート プロシージャ コール (RPC) を作成するための API を提供します。 RPC は、サーバー側の.NET コードからクライアントで関数を呼び出します。 サポートされているプラットフォームは複数あります。各プラットフォームには、それぞれのクライアント SDK が含まれています。 このため、RPC 呼び出しによって呼び出されるプログラミング言語は異なります。

ASP.NET CoreのSignalRの機能を次に示します。

  • 接続管理を自動的に処理します。
  • 接続されているすべてのクライアントに同時にメッセージを送信します。 たとえば、チャット ルームなどです。
  • 特定のクライアントまたはクライアントのグループにメッセージを送信します。
  • Azure SignalR ServiceRedis バックプレーン などのオプションを使用して、トラフィックの増加に対応するようにスケーリングします。
  • トリムとネイティブの事前コンパイル (AOT) をサポートするシナリオで使用可能です。
  • ハブ メソッドでのポリモーフィック型の処理をサポートします。
  • ActivitySource ハブ サーバーおよび .NET クライアント向けのSignalRを使った分散トレースをサポートします。
  • SignalR ハブ プロトコル

ソースは、GitHub の リポジトリでホストされます。

Transports

SignalR では、(グレースフル フォールバックの順に) リアルタイム通信を処理するために、次の手法がサポートされています。

  • WebSockets
  • サーバー側イベント
  • 長いポーリング

SignalR は、サーバーとクライアントの機能内にある最適なトランスポート方法を自動的に選択します。 WebSocket は、一般的に最適なパフォーマンスを提供するため、推奨されるトランスポートです。

Hubs

SignalR では、"ハブ" を使用してクライアントとサーバー間で通信を行います。

ハブは、クライアントとサーバーが相互にメソッドを呼び出すことを可能にするハイレベル パイプラインです。 SignalR は、マシンの境界を越えたディスパッチを自動的に処理し、クライアントがサーバー上でメソッドを呼び出すこと、またその逆も可能にします。 厳密に型指定されたパラメーターをメソッドに渡して、モデル バインドを有効にできます。 SignalR では、JSON に基づくテキスト プロトコル (既定) と MessagePack に基づくバイナリ プロトコルという 2 つの組み込みハブ プロトコルがサポートされています。 通常、MessagePack では JSON と比較して小さいメッセージが作成されます。 詳細については、「SignalR の での MessagePack Hub Protocol の使用」を参照してください。

ハブは、クライアント側メソッドの名前とパラメーターを含むメッセージを送信することで、クライアント側コードを呼び出します。 メソッド パラメーターとして送信されるオブジェクトは、構成済みのプロトコルを使用して逆シリアル化されます。 クライアントでは、名前とクライアント側コードのメソッドのマッチングが試行されます。 一致が見つかると、クライアントはメソッドを呼び出し、それに逆シリアル化されたパラメーター データを渡します。

その他のリソース

SignalR の概要

ASP.NET Core SignalR は、アプリへのリアルタイム Web 機能の追加を簡略化するオープンソース ライブラリです。 リアルタイム Web 機能を使用すると、サーバー側のコードでコンテンツをクライアントに即座にプッシュできます。

SignalR に適した候補は、次のとおりです。

  • サーバーからの頻繁な更新が必要なアプリ。 たとえば、ゲーム、ソーシャル ネットワーク、投票、オークション、マップ、GPS などのアプリです。
  • ダッシュボードと監視アプリ。 たとえば、会社のダッシュボード、売上の即時更新、トラベル アラートなどです。
  • コラボレーション アプリ。 ホワイトボード アプリとチーム会議ソフトウェアは、コラボレーション アプリの例です。
  • 通知を必要とするアプリ。 ソーシャル ネットワーク、電子メール、チャット、ゲーム、トラベル アラート、その他の多くのアプリは通知を使用します。

SignalR は、サーバーからクライアントへのリモート プロシージャ コール (RPC) を作成するための API を提供します。 RPC は、サーバー側の.NET コードからクライアントで関数を呼び出します。 サポートされているプラットフォームは複数あります。各プラットフォームには、それぞれのクライアント SDK が含まれています。 このため、RPC 呼び出しによって呼び出されるプログラミング言語は異なります。

ASP.NET CoreのSignalRの機能を次に示します。

  • 接続管理を自動的に処理します。
  • 接続されているすべてのクライアントに同時にメッセージを送信します。 たとえば、チャット ルームなどです。
  • 特定のクライアントまたはクライアントのグループにメッセージを送信します。
  • 増加するトラフィックを処理するためにスケーリングします。
  • SignalR ハブ プロトコル

ソースは、GitHub の リポジトリでホストされます。

Transports

SignalR では、(グレースフル フォールバックの順に) リアルタイム通信を処理するために、次の手法がサポートされています。

  • WebSockets
  • サーバー側イベント
  • 長いポーリング

SignalR は、サーバーとクライアントの機能内にある最適なトランスポート方法を自動的に選択します。

Hubs

SignalR では、"ハブ" を使用してクライアントとサーバー間で通信を行います。

ハブは、クライアントとサーバーが相互にメソッドを呼び出すことを可能にするハイレベル パイプラインです。 SignalR は、マシンの境界を越えたディスパッチを自動的に処理し、クライアントがサーバー上でメソッドを呼び出すこと、またその逆も可能にします。 厳密に型指定されたパラメーターをメソッドに渡して、モデル バインドを有効にできます。 SignalR には、JSON に基づくテキスト プロトコルと MessagePack に基づくバイナリ プロトコルの 2 つの組み込みハブ プロトコルがあります。 通常、MessagePack では JSON と比較して小さいメッセージが作成されます。 MessagePack プロトコルのサポートを提供するには、古いブラウザーで XHR レベル 2 をサポートする必要があります。

ハブは、クライアント側メソッドの名前とパラメーターを含むメッセージを送信することで、クライアント側コードを呼び出します。 メソッド パラメーターとして送信されるオブジェクトは、構成済みのプロトコルを使用して逆シリアル化されます。 クライアントでは、名前とクライアント側コードのメソッドのマッチングが試行されます。 一致が見つかると、クライアントはメソッドを呼び出し、それに逆シリアル化されたパラメーター データを渡します。

ECMAScript 6 (ES6) をサポートしていないブラウザー

SignalR は ES6 を対象としています。 ES6 をサポートしていないブラウザーの場合は、ライブラリを ES5 にトランスパイルします。 詳細については、「ES6 の概要 – Traceur と Babel を使用した ES6 から ES5 へのトランスパイル」を参照してください。

その他のリソース