2

私は長いポーリング、コメットなどについて読んでおり、.Net に取り組んでおり、SignalR と AspComet について見つけたすべてを読んでいます。私は彗星と同様の初心者ですが、jquery.ajax/complete を使用するだけで SignalR または AspComet を使用する利点が明確ではありません。

(function poll(){
    $.ajax({ url: "server", success: function(data){
       doSomething();    
    }, dataType: "json", complete: poll, timeout: 30000 });
})();

しかし、ここで何かが明らかに欠けています。助けてもらえますか?

また、システム/サーバーの観点から見た主な違いは何ですか? $.ajax を使用してサーバーへの接続を開き、それを長時間開いたままにしておくことは理解していますが (同時に開いている接続が多すぎるなどのすべての欠点があります)、SignalR も同じことを行うと思います。か否か?一方、これについて、AspComet は、スレッドを解放して要求プールに戻すと述べています。

私は知っています、私は少し混乱しており、SignalR および/または AspComet と $.ajax のものを使用する利点についての紹介は大歓迎です:)

ありがとう!

4

2 に答える 2

2

あなたの$.ajax例では、サーバーに複数のリクエストを送信しており、クライアントごとにこれを行っています。そのため、Web サーバーは HTTP リクエストによって絶えず攻撃を受けますが、クライアントが通知をサブスクライブしているデータはそれほど頻繁には変更されない可能性があるため、実際に目的を果たすものはごくわずかです。1 つの AJAX 要求が完了する限り、別の要求がすぐに送信されます。

一方、長いポーリングでは、サーバーによってブロックされた単一の要求を送信し、応答への書き込みを許可してクライアントに通知します。

ロング ポーリングの利点は、サーバーに送信される HTTP 要求の数を制限できることです。

于 2012-02-13T08:48:33.670 に答える
2

COMET アプリケーションには、多くの場合、カスタム サーバーが必要です。IIS は、明らかにスケーリングしない各要求を処理するための専用スレッドを保持します。IIS では、CPU ごとに数千スレッドという制限があります。

AspComet は、スレッドの有効期間を処理するサーバー側のソリューションを提供することで、この問題を解決します (あなたが書いたように、スレッドをプールに戻します)。AspComet はBayeux プロトコルと互換性があるため、任意の Bayeux JS クライアントを使用できます。

SignalR は、非同期呼び出しで基になる通信プロトコルをカプセル化するクライアント/サーバー ソリューションです。SignalR は利用可能な最適なプロトコル (ロング ポーリング、Websockets など) を選択するため、心配する必要はありません。.NET、Silverlight、WP7、JS などのクライアントがあります。

于 2012-02-13T20:00:49.867 に答える