SqlCacheDependency を使用してリアルタイム更新を取得しますか?- ASP.NET
-
19-09-2019 - |
質問
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 は簡単です。クエリを実行してデータを取得し、プッシュするだけです。SqlDependency オプションを使用することも、単にポーリングすることもできます。データの重さによって異なります。
項目 #2 は、サーバーに常にアクセスするか、comet サーバーを使用する必要があるため、少し複雑です。私たちは拡張性の高い .NET Comet サーバーを作成しました。 WebSync, 、フローズンマウンテンにあるのがこの法案に合うかもしれません。基本的に、公開を推進する別のプロセスがあり、WebSync がクライアントへのデータのプッシュを処理します。