マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

仕組み

下位トランスポート

下位トランスポートには、

がある。

API

SignalRには、PersistentConnectionHubという2つのAPIが存在する。

PersistentConnection?

Hub

  • SignalRを使ったアプリの開発では主にHubを使う。
  • PersistentConnectionの上位に実装されている(RPC的な高レベルAPI)。
    • クライアント/サーバ間のメソッド呼び出しという基本的な機能を提供している。
  • オーバーヘッドが大きい。
    • リクエストの解析
    • リフレクションを使ったメソッド呼び出し

Connection ID

Context

  • Hub.Contextプロパティ
    • HubCallerContext?クラスのインスタンスがHub.Contextプロパティとして公開される。
      #プロパティ説明
      Context.ConnectionId?プロパティクライアントのコネクションID
      Context.HeadersプロパティHTTPリクエスト・ヘッダーのコレクション
      Context.QueryString?プロパティクエリ文字列のコレクション
      Context.Requestプロパティ今回のリクエスト情報
      Context.RequestCookies?プロパティクッキーのコレクション
      Context.Userプロパティログイン中のユーザー情報

Groupsプロパティ

グループ管理を行う。

#メソッド説明
1Groups.Addメソッド全てのクライアント
2Groups.Removeメソッド自分のみのクライアント

Clientsプロパティ

  • 全て、自分、自分以外のクライアントへのメッセージ送信
    #プロパティのメソッド説明
    1Clients.Allプロパティのメソッド全てのクライアント
    2Clients.Callerプロパティのメソッド自分のみのクライアント
    3Clients.Othersプロパティのメソッド自分以外の全てのクライアント
  • グループのクライアントへのメッセージ送信
    #プロパティのメソッド説明
    1Clients.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データベースでは実行できない。

開発

サーバ

処理順

  • テンプレートを選択
  • NuGetを使ってSignalRをインストール
  • Global.asax.csファイルのApplication_Startで設定
  • Hubクラスのルーティングを設定する。
  • 必要に応じてスケールアウトに関する設定を行う。
    GlobalHost.DependencyResolver.XXXX(config);
  • 必要に応じてHubPipeline?を追加する設定する。  GlobalHost?.HubPipeline?.AddModule?(new XXXXHubPipeline?())
  • 通例的にHubsディレクトリを作成
  • Hubクラスを作成(なるべくHubName?属性を付与)
  • Hubクラスのメソッドに、Clientsのプロパティを使用してレスポンス処理を書く。

サーバ・ライブラリ

クライアント

処理順

  • サーバとの接続オブジェクトを作成
  • Hubのプロキシ・オブジェクトを作成
  • クライアントのメソッド(コールバック)を登録
  • 接続を開始
  • サーバのメソッドを呼出

クライアント・ライブラリ

  • , etc.
    SignalR-ObjCなどもある。

WebSocket

概要

利用方法

  • Windows Server 2012から搭載されたIIS 8と.NET Framework 4.5が必要。
  • サーバ並びにブラウザ共にWebSocketをサポートしていた場合に有効になる。
  • WebSocketがサポートされない場合、WebSocket以外の選択肢を用いてリアルタイム通信を実現する。

WebSocket以外

サーバの要件とブラウザ側の対応状況に基づいて、
選択肢の中から最適な通信手段をSignalRが選択する。

選択肢

  • iframe
  • Comet (Ajax Long-polling)
  • Server-Sent Events

参考

詳しくは、コチラを参照。

参考

Wikipedia

Qiita

@IT

Microsoft Docs


Tags: :.NET開発, :OWIN, :ASP.NET, :ASP.NET SignalR


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-01-29 (月) 13:22:42 (512d)