この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 20007|答える: 1

[ASP.NET] SignalRの導入と紹介

[リンクをコピー]
掲載地 2017/07/05 10:21:40 | | | |
1. SignalRとは何か:        
ASP.NET SignalRは、開発開発者がアプリケーションにライブウェブコンテンツを追加するプロセスを簡素化するために提供されたクラスのライブラリです。 リアルタイムウェブ機能とは、サーバーがクライアントからのリクエストを待つ(コンテンツ返却)を待つのではなく、サーバーコードがいつでもクライアントにコンテンツを積極的にプッシュできるようにすることを指します。
すべての「ライブ」ウェブ機能はSignalRを使って ASP.NET アプリケーションに追加できます。 最もよく使われる例はチャットルームですが、それ以上のことができます。 以下の状況を考えてみましょう:ユーザーは最新のデータを見るためにウェブページを常に更新する必要があります。 あるいは、長いポーリングを実装してページ上で新しいデータを取得(および表示)することもできます。その後、SignalRを使ってそれを行うことも検討できます。 例えば、ダッシュボードやモニタリングアプリケーション、 共同作業アプリケーション(例:複数の人が同時に文書を編集する)、 仕事の進捗状況やリアルタイムのプレゼンテーションフォームなど。
また、リアルタイムゲームのようにサーバーからの高頻度更新が必要な新しいタイプのウェブアプリケーションにも適しています。 良い例を挙げましょう:ShoorR。
SignalRは、サーバー側から簡単にアクセス可能なサーバー間リモートプロシージャコール(RPC)を作成できるシンプルなAPIを提供します。 ネットコード。 SignalRには接続(例:接続イベントや切断イベント)や接続グルーピングも含まれています。

SignalRは自動的に接続管理が可能です。 そしてチャットルームのように、接続されたすべてのクライアントにブロードキャストメッセージを送ることができます。 もちろん、大量送信に加えて、特定のクライアントにメッセージを送ることも可能です。 クライアントとサーバー間の接続は永続的であり、従来のHTTPプロトコルとは異なり、通信ごとに接続を再確立する必要があります。
SignalRは「サーバープッシュ」機能をサポートしており、サーバーコードはウェブ上で現在一般的に使われているリクエストの代わりにリモートプロシージャコール(RPC)を使ってブラウザ内のクライアントコードを呼び出せます。これが対応する処理モデルです。
SignalRアプリケーションは、Service Bus、SQL SERVER、またはRedisを用いて数千のクライアントに拡張可能です。
SignalRはオープンソースで、GitHubからアクセス可能です。

2. SignalRとWebSocket        

ignalRは可能な限りWebSocketトランスポート方式を使用しています。 そして自動的に古いトランスポート方式(例:HTTPロング接続)に切り替えます。 WebSocketsで直接アプリケーションを書くこともできますが、SignalRを使うことで、車輪を一から作り直すことなく、より多くの追加機能が使えます。 最も重要なのは、旧クライアント向けに互換性のあるコードを別々に作ることを考えずに、ビジネス実装に集中できることです。 SignalRはWebSocketの更新を心配する必要もありません。SignalRは基盤となるトランスポート方式の変更に対応し、異なるバージョンのWebSocket間で一貫したアクセスインターフェースを提供するために継続的にアップデートされていきます。
もちろん、WebSocketトランスポートのみを使うソリューションを作ることもでき、SignalRは他のトランスポート方式へのフォールバックや新しいWebSocket実装に合わせてアプリケーションを修正するなど、自分でコードを書くために必要なすべての機能を提供します。

3. 輸送と帰還      

SignalRは、クライアントとサーバー間でリアルタイム機能を実装するために必要なトランスポート技術の抽象化です。 SignalRはまずHTTPで接続を開始し、WebSocketが利用可能かどうかを確認します。確認できればWebSocketの接続にアップグレードします。 WebSocketは、サーバーメモリの最も効率的な利用が可能で、遅延が最小かつ包括的な基盤機能(クライアントとサーバー間の全二重通信など)を持つため、SignalRにとって最も理想的な伝送方法ですが、同時にWindows Server 2012またはWindows 8のオペレーティングシステムを使用しなければなりません。 .NET フレームワークのバージョン4.5以降です。 これらの要件が満たされない場合、SignalRは別の伝送方法を試みます。

4. HTML5の出荷         

使用されるトランスポート方式はクライアントブラウザがHTML5をサポートしているかどうかに依存し、それ以外は従来のトランスポート方式が使われます。
          WebSocket(サーバーとブラウザの両方がWebSocketをサポートしている場合)。 WebSocketは、クライアント側とサーバー側の両方で真の持続的な双方向接続を確立する唯一の方法です。 もちろん、WebSocketは最も厳しい要件も持っており、IE、Chrome、FFの最新バージョンでのみサポートされており、OperaやSafariなど他のブラウザでは部分的にしか実装されていません。
サーバーはイベントを送信します。これはイベントソースとも呼ばれます(ブラウザがサーバー送信イベントをサポートしている場合、IEを除くほぼすべてのブラウザがこの機能をサポートしています)。

5. 彗星の送信

以下のトランスポートタイプは、Cometのウェブアプリケーションモデルに基づいており、ブラウザまたはクライアントが長いHTTP接続リクエストを維持し、サーバーはクライアントからの明示的なリクエストなしにデータをクライアントにプッシュできます。
Forever Frame(IEのみ) Forever Frameは、完了しないリクエストをサーバーに送る隠れたIFrameを作成します。 その後、サーバーはクライアントに継続的にスクリプトを送信し、クライアントによって即座に実行されます。すなわち、サーバーからクライアントへの一方向リアルタイム接続です。 クライアントからサーバーへの接続は、その接続とは異なる接続を使用します。 例えば、標準的なHTMLリクエストは送信されるデータごとに新しい接続を生成します。
Ajaxのロングポーリングは永続的な接続を作るのではなく、サーバーに対して絶えずリクエストを送ることでポーリングを行います。 サーバーが応答するのを待って、各接続でこの接続を閉じ、すぐに新しいリクエストを出します。 もちろん、接続をリセットして再接続した際に遅延が生じます。
さまざまな構成でサポートされる輸送方法については、「サポートプラットフォーム」を参照してください。 (IEは8以上が必要で、他のブラウザは現在のバージョン-1です)
移送方法の選択プロセス
以下のリストは、SignalRがどのように送信にどのタイプを使用するかを決定している様子を示しています。
IE8以前は長いポーリングを使っています。
もしJSONPが設定されている場合(つまり接続時にjsonpパラメータがtrueに設定されている)、長いポーリングを使いましょう。
もしクロスドメイン接続(つまり、SignalRエンドポイントとページが同じドメインに属していない)を使用している場合、以下の条件を満たす場合はWebSocketsを使用してください。
クライアントはクロスドメインリソース共有(CORS)をサポートしています。詳細はCORSを参照してください
クライアントはWebSocketをサポートしています
サーバーはWebSocketをサポートしています
上記の条件のいずれかが満たされない場合は、長い投票が行われます。 クロスドメイン接続の詳細については、「クロスドメイン接続の確立方法」をご覧ください。
JSONPの使用設定をしておらず、接続がクロスドメインでない場合は、クライアントとサーバーの両方がWebSocketをサポートしている限り、もちろんWebSocketを使いましょう。
クライアントやサーバーがWebSocketをサポートしていない場合は、サーバーを使ってイベントを送信してください。
サーバーがイベントを送信できない場合は、Forever Frameを使用します。
Forever Frameが利用できない場合は、長いポーリングを使いましょう。
モニター送信
Hubログを有効にしてブラウザのコンソールで、アプリケーションがどのトランスポート方式を使っているか確認できます。
ログを有効にするには、クライアントアプリケーションに以下のコマンドを追加してください:
nnection.hub.logging = true;

6. 検査および輸送:    

Hubログを有効にしてブラウザのコンソールで、アプリケーションがどのトランスポート方式を使っているか確認できます。 ログを有効にするには、クライアントアプリケーションに以下のコマンドを追加してください:
    nnection.hub.logging = true;
        $.connection.hub.logging = true;
IEではF12キーを押して開発者ツールを開き、コンソールタブをクリックしてください。

ChromeではCtrl+Shift+Jを押してコンソールを開きます


コンソールのログを観察することで、SignalRが使っている送信方法を確認できます。


7. 指定船舶:

伝送方法の交渉には一定の時間とサーバー/クライアントのリソースが必要です。 クライアント環境が既知であれば、接続開始時にトランスポート方式を指定して性能を向上させることができます。 以下のコードは、クライアントが他のプロトコルをサポートしている場合、接続開始時にAjaxのロングポーリングを直接使用する方法を示しています。
connection.start({ transport: 'longPolling'});
クライアントに特定の順番で輸送交渉を依頼したい場合、交渉が試みられる順番を指定できます。 以下のコードは、まずWebSocketを使い、失敗後にロングポーリングを使う方法を示しています。
connection.start({ transport: ['webSockets','longPolling'] });
ユーザーが指定する文字列定数は以下の通りに定義されます。
ウェブソケット
forverFrame
serverSentEvents
ロングポーリング

8. 接続とハブ SignalR APIには、永続接続とハブという2つのクライアント-サーバー通信モデルが含まれています。

接続は、単一の、グループ化された、またはブロードキャストのメッセージを送信するための単純なエンドポイントを表します。 PersistentConnection API(.NETコードのPersistentConnectionクラスで表される)は、開発者にSignalRの基盤となる通信プロトコルへの直接アクセスを提供します。 WCFのような接続ベースのAPIを使ったことがある開発者は、接続通信モデルにより馴染みがあります。
ハブはAPIベースですが、より高度な通信パイプラインであり、クライアントとサーバーが直接メソッドを呼び出せるようにします。 SignalRはクロスマシンスケジューリングを非常にうまく処理しており、クライアントがローカルメソッドを呼び出すかのようにサーバー上のメソッドを簡単に呼び出せ、その逆も可能にしています。 .Net Remotingのようなリモート通話ベースのAIPを使った開発者は、ハブモデルにより馴染みがあります。 ハブを使うと、強い型付けのパラメータをメソッドに渡し、モデルに割り当てることも可能です。

        アーキテクチャ図:以下の図は、ハブ、連続接続、そして輸送に使用される基盤技術の関係を示しています。


9. ハブの仕組み:

サーバーコードがクライアントを呼び出すと、サーバーは呼び出しメソッドとパラメータを含むパケットをクライアントに送ります(オブジェクトがメソッドパラメータとして使われた場合は、送信用のJSONとしてシリアライズされます)。 クライアントは受け取ったメソッド名を確認し、クライアント定義のメソッドでマッチルックアップを行い、マッチが成功すればメソッドが実行され、デシリアル化されたオブジェクトがメソッドパラメータとして使われます。
Fiddlerのようなツールを使ってメソッド呼び出しの実行を監視できます。 以下の画像は、Fiddlerのログからキャプチャされたメソッドを示し、SignalRサーバーからウェブブラウザクライアントへ送信します。 ハブから開始されるメソッドはMoveShapeHubと呼ばれ、メソッドはupdateShapeと呼ばれています。


この例では、ハブ名はパラメータ「H」、メソッド名はパラメータ「M」、メソッドに送られるパラメータオブジェクトはパラメータ「A」と識別されます。 メッセージを生成するアプリケーションは高周波リアルタイム通信チュートリアルで実装されました。
コミュニケーションモデルの選択:
ほとんどのアプリケーションはハブのAPIを利用しており、以下の状況で利用できます:
メッセージが送信されるフォーマットを指定する必要があります。
開発者はリモートコールモデルよりもメッセージングとスケジューリングモデルを好んで利用します
このメッセージングモデルは既存のアプリケーションで使用されており、SignalRへの移植も計画されています。






先の:.net/c#のマルチスレッドでコレクションを修正するのは問題になるのでしょうか?
次に:asp.net mvc4.0 SignalR (1) インストール
 地主| 掲載地 2018/08/27 14:18:05 |
ハブの一般的な手法の説明


クライアント。発信者:発信者とコミュニケーションが取れる

クライアント。その他:このハブに接続されているすべてのクライアントとコミュニケーションを取る。あなた以外の

Clients.All:このハブに接続されているすべてのクライアントと通信可能です

Clients.OthersInGroup:指定されたグループ以外のハブに接続されている他のクライアントと通信可能です

Clients.Client:ConnectionIdを指定するクライアントと通信します

Clients.AllExcept:指定されたConnectionIdを除く、このハブに接続されたすべてのクライアントと通信可能

Clients.Group:指定されたグループのクライアントと通信します

Clients.User:可以与指定的userId进行通信
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com