ASP.NET SignalR 時代に作り、ASP.NET Core SignalR が出てからも長らく放置していた ReactiveSignalR を ASP.NET Core SignalR 向けに作り直しました!ということで、晴れて v1.0 をリリース!バージョン番号なんて特に意味はないんですが...。
ASP.NET SignalR の頃にはクライアント向けとサーバー向けのライブラリを用意していたのですが、今回の ASP.NET Core SignalR 対応でサーバー側は削っています。理由はいくつかあるのですが、作ったくせに自分でも使わなかった (!) というあたりに必要性を感じなくなったというのが大きいです。
Available Now!!
すでに NuGet にも放流してあるので、今すぐ利用することができます。
提供する機能
現状以下のふたつだけです。超シンプル!
HubConnection.OnメソッドをIObservableとして返すHubConnectionにあるイベントをIObservableとして返す
特に前者が大切で、Rx.NET のオペレーターにそのまま接続できるようになるのが大変強いです。
使い方
ASP.NET Core SignalR 標準だとデリゲートを使ったコールバックでしか記述できませんが、ReactiveSignalR を導入すると以下のような感じで書けるようになります。.On と書くだけで捗る!簡単!
// こんな感じでコネクションを作り var url = "http://localhost:5000/chathub"; var connection = new HubConnectionBuilder().WithUrl(url).Build(); // Rx を使って書く var subscription = connection .On<string>("Receive") // ReactiveSignalR はこの部分を提供 .Where(x => ...) // あんなことも .Select(x => ...) // こんなことも .ObserveOn(SynchronizationContext.Current) // スレッドを戻すことも .Subscribe(x => ...); // できます
SignalR ♡ Rx
SignalR のようなサーバー側から Push 配信されるものは Rx と非常に相性が良いです。またサーバーの負荷対策にも Rx を使うことができるので、SignalR を採用するときは Rx のことを少しだけ思い出してあげてください。
(このドキュメントは ASP.NET SignalR 時代のものですが、考え方は共通です)