Redis による SignalR スケールアウト
警告
このドキュメントは、SignalR の最新バージョン用ではありません。 SignalR の ASP.NET Coreを見てみましょう。
このトピックで使用するソフトウェアのバージョン
- Visual Studio 2013
- .NET 4.5
- SignalR バージョン 2.4
このトピックの以前のバージョン
SignalR の以前のバージョンの詳細については、「 SignalR の古いバージョン」を参照してください。
質問とコメント
このチュートリアルが気に入った方法と、ページの下部にあるコメントで改善できる内容に関するフィードバックをお寄せください。 チュートリアルに直接関連しない質問がある場合は、 ASP.NET SignalR フォーラム または StackOverflow.com に投稿できます。
このチュートリアルでは、 Redis を使用して、2 つの個別の IIS インスタンスにデプロイされた SignalR アプリケーション全体にメッセージを配布します。
Redis は、メモリ内のキーと値のストアです。 また、パブリッシュ/サブスクライブ モデルを使用したメッセージング システムもサポートしています。 SignalR Redis バックプレーンは、pub/sub 機能を使用して他のサーバーにメッセージを転送します。
このチュートリアルでは、次の 3 つのサーバーを使用します。
- Windows を実行している 2 つのサーバー。SignalR アプリケーションのデプロイに使用します。
- Linux を実行している 1 つのサーバー。Redis の実行に使用します。 このチュートリアルのスクリーンショットでは、Ubuntu 12.04 TLS を使用しました。
使用する物理サーバーが 3 台ない場合は、Hyper-V 上に VM を作成できます。 もう 1 つのオプションは、Azure に VM を作成することです。
このチュートリアルでは公式の Redis 実装を使用しますが、MSOpenTech からの Redis の Windows ポート もあります。 セットアップと構成は異なりますが、それ以外の場合は手順は同じです。
注意
Redis を使用した SignalR スケールアウトでは、Redis クラスターはサポートされていません。
概要
詳細なチュートリアルに進む前に、以下に、実行する操作の概要を示します。
Redis をインストールし、Redis サーバーを起動します。
次の NuGet パッケージをアプリケーションに追加します。
SignalR アプリケーションを作成します。
次のコードを Startup.cs に追加して、バックプレーンを構成します。
public class Startup { public void Configuration(IAppBuilder app) { // Any connection or hub wire up and configuration should go here GlobalHost.DependencyResolver.UseStackExchangeRedis("server", port, "password", "AppName"); app.MapSignalR(); } }
Hyper-V 上の Ubuntu
Windows Hyper-V を使用すると、Windows Server 上に Ubuntu VM を簡単に作成できます。
から http://www.ubuntu.comUbuntu ISO をダウンロードします。
Hyper-V で、新しい VM を追加します。 [ 仮想ハード ディスクの接続 ] ステップで、[ 仮想ハード ディスクの作成] を選択します。
[ インストール オプション] ステップで、[ イメージ ファイル (.iso)] を選択し、[ 参照] をクリックして、Ubuntu インストール ISO を参照します。
Redis をインストールする
Redis をダウンロードしてビルドするには、 の http://redis.io/download 手順に従います。
wget http://redis.googlecode.com/files/redis-2.6.12.tar.gz
tar xzf redis-2.6.12.tar.gz
cd redis-2.6.12
make
これにより、ディレクトリ内に Redis バイナリが src
ビルドされます。
既定では、Redis にはパスワードは必要ありません。 パスワードを設定するには、ソース コードの redis.conf
ルート ディレクトリにあるファイルを編集します。 (編集する前にファイルのバックアップ コピーを作成してください)。に次のディレクティブを redis.conf
追加します。
requirepass YourStrongPassword1234
次に、Redis サーバーを起動します。
src/redis-server redis.conf
Redis がリッスンする既定のポートであるポート 6379 を開きます。 (構成ファイルでポート番号を変更できます)。
SignalR アプリケーションを作成する
次のいずれかのチュートリアルに従って SignalR アプリケーションを作成します。
次に、Redis でのスケールアウトをサポートするようにチャット アプリケーションを変更します。 まず、NuGet パッケージを Microsoft.AspNet.SignalR.StackExchangeRedis
プロジェクトに追加します。 Visual Studio の [ツール ] メニューから [ NuGet パッケージ マネージャー] を選択し、[ パッケージ マネージャー コンソール] を選択します。 [パッケージ マネージャー コンソール] ウィンドウで、次のコマンドを入力します。
Install-Package Microsoft.AspNet.SignalR.StackExchangeRedis
次に、Startup.cs ファイルを開きます。 Configuration メソッドに次のコードを追加します。
public class Startup
{
public void Configuration(IAppBuilder app)
{
// Any connection or hub wire up and configuration should go here
GlobalHost.DependencyResolver.UseStackExchangeRedis("server", port, "password", "AppName");
app.MapSignalR();
}
}
- "server" は、Redis を実行しているサーバーの名前です。
- port はポート番号です
- "password" は、redis.conf ファイルで定義したパスワードです。
- "AppName" は任意の文字列です。 SignalR は、この名前の Redis pub/sub チャネルを作成します。
次に例を示します。
GlobalHost.DependencyResolver.UseStackExchangeRedis("redis-server.cloudapp.net", 6379,
"MyStrongPassword1234", "ChatApp");
アプリケーションのデプロイと実行
SignalR アプリケーションをデプロイするために Windows Server インスタンスを準備します。
IIS ロールを追加します。 WebSocket プロトコルを含む "アプリケーション開発" 機能を含めます。
管理サービスも含めます ([管理ツール] の下に表示されます)。
Web Deploy 3.0 をインストールします。 IIS マネージャーを実行すると、Microsoft Web Platformのインストールを求めるメッセージが表示されるか、インストーラーをダウンロードできます。 プラットフォーム インストーラーで、Web 配置を検索し、Web 配置 3.0 をインストールします
Web 管理サービスが実行されていることを確認します。 そうでない場合は、サービスを開始します。 (Windows サービスの一覧に Web 管理サービスが表示されない場合は、IIS ロールを追加したときに管理サービスがインストールされていることを確認してください)。
既定では、Web 管理サービスは TCP ポート 8172 でリッスンします。 Windows ファイアウォールで、ポート 8172 で TCP トラフィックを許可する新しい受信規則を作成します。 詳細については、「 ファイアウォール規則の構成」を参照してください。 (Azure で VM をホストしている場合は、Azure portalで直接これを行うことができます。「仮想マシンにエンドポイントを設定する方法」を参照してください)。
これで、開発用コンピューターからサーバーに Visual Studio プロジェクトをデプロイする準備ができました。 ソリューション エクスプローラーで、ソリューションを右クリックし、[発行] をクリックします。
Web 配置の詳細なドキュメントについては、「 Visual Studio と ASP.NET 用の Web 配置コンテンツ マップ」を参照してください。
アプリケーションを 2 つのサーバーにデプロイする場合は、個別のブラウザー ウィンドウで各インスタンスを開き、それぞれがもう一方から SignalR メッセージを受信することを確認できます。 (もちろん、運用環境では、2 つのサーバーはロード バランサーの背後に置かれていたことになります)。
Redis に送信されるメッセージを確認したい場合は、Redis と共にインストールされる redis-cli クライアントを使用できます。
redis-cli -a password
SUBSCRIBE ChatApp
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示