質問

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

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

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

パフォーマンスの問題を起こさない簡単な解決策は何でしょうか?

役に立ちましたか?

解決

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

そして、最後のステップとして処理を行っている、あなたのバックグラウンド・プロセスは、ファイルを作成するか、またはそうするように、あなたのWeb層にWebサービスを呼び出すことができます。

ここではそれが仕事ができる方法です。

ユーザーがボタンを押すと、サーバにどのポスト

プロセスの

サーバキックと、例えば、識別子を返しますC3201620-E622-4fe2-9F3A-E02FFA613F59

のWeb UIは、世論調査ではperidodically 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                 

        }); 

他のヒント

2 つの問題があります:

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

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

項目 #2 は、サーバーに常にアクセスするか、comet サーバーを使用する必要があるため、少し複雑です。私たちは拡張性の高い .NET Comet サーバーを作成しました。 WebSync, 、フローズンマウンテンにあるのがこの法案に合うかもしれません。基本的に、公開を推進する別のプロセスがあり、WebSync がクライアントへのデータのプッシュを処理します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top