リアルタイムで更新する必要のあるフロントエンドに複数の「ウィジェット」があるサイトのバックエンドを構築しています。
現在、ページの読み込み時に、すべてのウィジェットにデータを入力するloadメソッドがあります。私の質問は、さらなる更新のリアルタイムの側面をどのように処理するかです。
1秒ごとにサービスをクエリして最新のデータを返すことができるajax呼び出しを複数持つことを考えましたが、それは非効率的です。
コントローラからビューにデータを「プッシュ」する方法はありますか?
リアルタイムで更新する必要のあるフロントエンドに複数の「ウィジェット」があるサイトのバックエンドを構築しています。
現在、ページの読み込み時に、すべてのウィジェットにデータを入力するloadメソッドがあります。私の質問は、さらなる更新のリアルタイムの側面をどのように処理するかです。
1秒ごとにサービスをクエリして最新のデータを返すことができるajax呼び出しを複数持つことを考えましたが、それは非効率的です。
コントローラからビューにデータを「プッシュ」する方法はありますか?
多分あなたはこのプロジェクトを見ることができます:https ://github.com/SignalR/SignalR
ASP.NET SignalRは、ASP.NET開発者向けの新しいライブラリであり、アプリケーションにリアルタイムWeb機能を非常に簡単に追加できます。「リアルタイムWeb」機能とは何ですか?これは、サーバー側のコードが、接続されているクライアントにコンテンツをリアルタイムでプッシュする機能です。
SignalRは、ASP.NETアプリケーションでサーバー間RPC(サーバー側の.NETコードからクライアントのブラウザーでJavaScript関数を呼び出す)を実行するための非常にシンプルで高レベルのAPIを提供し、接続管理に役立つフックを追加します。たとえば、接続/切断イベント、接続のグループ化、承認。
(http://signalr.net/からの抜粋)
それが役に立てば幸い。
私はあなたの最善の策は定期的にサーバーをポーリングすることだと思います:
$(document).ready(function() {
setTimeout("getUpdate()", 30000);
function getUpdate()
{
// Make an ajax call here
}
});
これにより、30秒ごとに更新が要求されます。
HTML5をサポートするブラウザーで実行されている場合は、WebSocketsを使用することもできます。
これは、フロントエンドのデータを更新する必要がある頻度によって異なります。ほとんどのページは定期的に更新する必要はありません。「ベストプラクティス」のしきい値があるかどうかはわかりませんが、Ajaxを使用した15〜20秒の更新が出発点として適していると思います。Ajax呼び出しを高速かつ無駄のないものにします。更新がない場合は、空白を返すだけかもしれません。それよりも高速な更新が必要な場合は、long polling
。ロングポーリングは基本的に、サーバーへのajax呼び出しをトリガーする場所であり、送信するデータが存在するまで接続は開いたままになります。長いポーリングでは、データの準備ができるのを待っている間に開いている接続とスレッドが実行されるため、より多くのサーバーリソースが必要になります。ASP.NETでは、長いポーリングスレッドを強制終了することについても心配する必要があります。これは、既定では、ブラウザーが接続を閉じたときに(たとえば、誰かがページから移動した場合に)これらのスレッドが強制終了されないためです。