「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
仕組み †
下位トランスポート †
下位トランスポートには、
がある。
API †
SignalRには、PersistentConnectionとHubという2つのAPIが存在する。
PersistentConnection? †
Hub †
- SignalRを使ったアプリの開発では主にHubを使う。
- オーバーヘッドが大きい。
- リクエストの解析
- リフレクションを使ったメソッド呼び出し
Connection ID †
Context †
- Hub.Contextプロパティ
- HubCallerContext?クラスのインスタンスがHub.Contextプロパティとして公開される。
# | プロパティ | 説明 |
| Context.ConnectionId?プロパティ | クライアントのコネクションID |
| Context.Headersプロパティ | HTTPリクエスト・ヘッダーのコレクション |
| Context.QueryString?プロパティ | クエリ文字列のコレクション |
| Context.Requestプロパティ | 今回のリクエスト情報 |
| Context.RequestCookies?プロパティ | クッキーのコレクション |
| Context.Userプロパティ | ログイン中のユーザー情報 |
Groupsプロパティ †
グループ管理を行う。
# | メソッド | 説明 |
1 | Groups.Addメソッド | 全てのクライアント |
2 | Groups.Removeメソッド | 自分のみのクライアント |
Clientsプロパティ †
- 全て、自分、自分以外のクライアントへのメッセージ送信
# | プロパティのメソッド | 説明 |
1 | Clients.Allプロパティのメソッド | 全てのクライアント |
2 | Clients.Callerプロパティのメソッド | 自分のみのクライアント |
3 | Clients.Othersプロパティのメソッド | 自分以外の全てのクライアント |
- グループのクライアントへのメッセージ送信
# | プロパティのメソッド | 説明 |
1 | Clients.Group(string groupName)のメソッド | 指定したグループ名に属するクライアント |
HubPipeline? †
SignalRのバージョン1.0から「HubPipeline?」と呼ばれる仕組みが追加された。
概要 †
- ASP.NET MVCのアクション・フィルタのようにメソッドが実行の前・後で独自の処理を行える。
- 実体はIHubPipelineModule?インターフェイスを実装したクラスの集合
- IHubPipelineModule?インターフェイスを実装したクラスのBeforeとAfterメソッドを実装する。
- Application_StartでGlobalHost?.HubPipeline?.AddModule?を使用してModuleを登録する。
認証 †
- ASP.NET MVCやWeb APIのようにAuthorize属性を付けるだけで認証が可能
- Notifyメッセージが送信されるのは認証済みのクライアントだけとなる。
スケールアウト †
- スケールアウトの際は、メッセージング・サーバを用意する必要がある。
- SignalR 1.1からはスケールアウトに必要な機能が内部的に共通化された。
Redis †
- KVS(Key-Valueストア)
- 他のKVSに無いPub/Sub型のメッセージング・システムを持っている。
Windows Azureサービス・バス †
- サーバを用意する必要がないので簡単に開始できる。
- メッセージ量が増えるとスケールしなくなる。
SQL Server †
- 「クエリ通知」という機構を利用している。
- AzureのSQLデータベースでは実行できない。
開発 †
サーバ †
処理順 †
- Global.asax.csファイルのApplication_Startで設定
- 必要に応じてHubPipeline?を追加する設定する。
GlobalHost?.HubPipeline?.AddModule?(new XXXXHubPipeline?())
- Hubクラスを作成(なるべくHubName?属性を付与)
- Hubクラスのメソッドに、Clientsのプロパティを使用してレスポンス処理を書く。
サーバ・ライブラリ †
クライアント †
処理順 †
- サーバとの接続オブジェクトを作成
- Hubのプロキシ・オブジェクトを作成
- クライアントのメソッド(コールバック)を登録
- 接続を開始
- サーバのメソッドを呼出
クライアント・ライブラリ †
- , etc.
SignalR-ObjCなどもある。
利用方法 †
サーバの要件とブラウザ側の対応状況に基づいて、
選択肢の中から最適な通信手段をSignalRが選択する。
選択肢 †
- iframe
- Comet (Ajax Long-polling)
- Server-Sent Events
参考 †
詳しくは、コチラを参照。
参考 †
Wikipedia †
Qiita †
@IT †
Microsoft Docs †
Tags: :.NET開発, :OWIN, :ASP.NET, :ASP.NET SignalR