SignalR Service 調査メモ(1)
SignalR Service が Public Preview になったそうなので調べてみました。
実際に使えるかどうかはおいといてサーバからのリアルタイム配信ってみんな大好き(?)ですから、そのうち役に立つ事があるやもしれません。
ちなみに私自身 SignalR を実際に使用した経験は、WebApps 上の管理画面的なWebアプリで他人の更新が自動的に反映される機能を追加する時に何度か使用した事はあります。
とりあえず作ってみる
Azure ポータルから "SignalR Service" で検索すると作れます。日本リージョンではまだ提供されていないのでとりあえず東南アジアで。
気になったのが Standard だと Unit数の変更が可能な所。Unit数を変更するだけという事は本来 SignalR でスケールする時にバックエンドとして Redis やら ServiceBus やらを立てて自分で設定しなければならない所を SignalR Service だと勝手に色々用意していい感じにやってくれるという事でしょうか? これはありがたいですね。
作成後、Quickstart を開くとこんな感じで使えばいいよ〜 って感じのソースが表示される。
ぱっと見普通に ASP.NET で SignalR を使う時に加えて AddAzureSignalR()・UseAzureSignalR() が増えてる所しか違いが見つからないです。
どうやって使用する SignalR Service を選択しているんだろうと思いつつリンクを辿って公式サンプルのChatRoom を見たら謎は解けました。
dotnet restore
dotnet user-secrets set Azure:SignalR:ConnectionString "<your connection string>"
dotnet run
シークレットマネージャに SignalR Service の接続文字列を設定しておくと使ってくれる感じなんですね。
ChatRoomを動かしてみる
そのままの流れで ChatRoom サンプルを動かしてみます。
サーバをローカルで立ち上げて http://localhost:5000 を開き、Networkを見るとHubを開きに行った時にCORSで SignalR Service の方に接続に行っているのが見て取れます。
テストページで何かを送信すると SignalR Service の方に投げている事も確認できます。つまり、何か発言すると「ブラウザ → SignalR Service → ChatRoomサーバ」と経由して飛んできて、ChatRoom サーバで投げ返す事により「ChatRoomサーバ → SignalR Service → ブラウザ」と飛んで行っているようです。
ここまでのまとめ
ChatRoom サンプルを動かした時点では特に変わった事をせずとも SignalR のエンドポイントを Azure上に立てる事ができて、スケールとかする時ちょっと楽になるかなという印象です。ASP.NET で SignalR をホストする時のちょっと上位互換みたいな。
気になっているのが Functions との組み合わせでサーバレスで送信ができるような使い方もできそうな事です。WebApps なしで html だけ開いておけば SignalR で通知が受けれるようなアプリがあれば色々使いでがありそうな気がします。
RealtimeSignIn とか多分そんな感じなので、おいおい中身を調べていきたいと思います。