1

Webページにリアルタイムの更新を表示したい(外部プロセスによって変更されたデータベーステーブルのステータスフィールドに基づく)。私の調査に基づくと、これを行うにはいくつかの方法があります。

  • ロングポーリング(Comet)-これは実装が複雑なようです
  • 通常のポーリング-AJAXメソッドで5秒ごとにデータベースヒットをトリガーして、現在のステータスを取得できます。しかし、これにはパフォーマンスの問題があるのではないかと心配しています。

次に、使用について読みましSqlCacheDependencyた。基本的に、テーブルのフィールドに基づいてキャッシュが無効になります。キャッシュが無効になっているときにトリガーされたイベントを使用して、ユーザーに新しい更新を表示できると思いますか?

パフォーマンスの問題が発生しない簡単なソリューションは何ですか?

4

2 に答える 2

1

データベースをポーリングする代わりに、よりスケーラブルでパフォーマンスの高いアプローチは、軽量のjsファイルのようなファイルがWebサーバー上に存在するかどうかをポーリングすることです。ファイルの内容は重要ではありませんが、プロセスの結果をより詳細に説明するある種のJSONオブジェクトを作成することができます。

次に、最後のステップとして処理を実行しているバックグラウンドプロセスで、ファイルを作成するか、Web層のWebサービスを呼び出して実行できます。

これがどのように機能するかです。

ユーザーがサーバーに投稿するボタンを押す

サーバーはプロセスを開始し、識別子を返します(例:C3201620-E622-4fe2-9F3A-E02FFA613F59)

次に、Web UIはC3201620-E622-4fe2-9F3A-E02FFA613F59.jsの存在を定期的にポーリングし、JavaScriptは404エラーを管理し、200を受信するまで再試行を続けます。

これがあなたにいくつかのアイデアを与えることを願っています。

jQueryで404を処理するコード例

$.ajax({
        url: '/CheckForStatusChange/C3201620-E622-4fe2-9F3A-E02FFA613F59.json',
        type: "GET",
        success: function(result) {

        },
        error: function(request, status, error) {
        //handle error here and setTimeOut                 

        }); 
于 2010-01-13T19:53:38.133 に答える
0

2つの問題があります:

  1. プッシュするデータを取得する
  2. クライアントへのデータのプッシュ

アイテム#1は、かなり効率的なクエリがあり、すべてのユーザーに対してクエリを実行しているわけではないことを前提とすると、簡単です。クエリを実行し、データを取得してプッシュするだけです。SqlDependencyオプションを使用することも、単にポーリングすることもできます。データの重さによって異なります。

アイテム#2は、サーバーに絶えずヒットするか、コメットサーバーを使用する必要があるため、少し注意が必要です。非常にスケーラブルな.NETコメットサーバーであるWebSyncを、FrozenMountainで作成しました。基本的に、パブリッシングを駆動する別のプロセスがあり、WebSyncがクライアントへのデータのプッシュを処理します。

于 2010-04-01T03:55:14.847 に答える