2011-12-09 8 views
4

一部のリソースをサーバから取得した後、30秒ごとにMVCビューページの一部がリフレッシュされます。私はsetTimeOutを使ってサーバから非同期にデータをフェッチし、古いデータと比較し、変更されている場合はdivタグを更新するためのjavascriptメソッドをトリガしています。今、global.asaxクラスでタイマーを作成し、application_startイベントで開始し、timer elapsedイベントでデータを取得し、データが変更された場合にのみSignalRを使用してすべてのクライアントに送信することを考えています。SignalR対setTimeout

ここでsetReturnでSignalRを使用する利点はありますか?

答えて

5

この場合の利点は、データが変更されていない場合でも、サーバーへの不要なトリップを回避できることです。 SignalRを使用すると、データが変更されたときにのみ、すべてのクライアントにデータをブロードキャストできます。

もうひとつの利点は、SignalRが心配することなく利用可能な最高の技術を使用してサーバーからブラウザにプッシュすることです。これは、クライアントがIEの場合は、クライアントがChrome、Firefox、Opera、またはForever Frameの場合、Server 4.5でサーバを実行している場合(おそらく将来の考慮事項)、WebSocket、Server Sent Eventsなどです。いずれにせよ、あなたはそれについて心配する必要はありません、SignalRはあなたのための輸送管理の世話をします。

データが保存されている場所と更新方法によっては、タイマーを完全になくして、変更されたときにすぐにすべてのクライアントにデータをブロードキャストすることもできます。コントローラ上の別のアクションメソッドによって更新された場合は、そこからクライアントにブロードキャストするだけです。他のプロセスを介してDBに直接更新された場合は、App_StartのアプリケーションでSQLクエリ通知を設定して、変更された時点で警告を受けてその時点でブロードキャストすることができます。

+0

ありがとうDamian!私はデータを適切に扱うことができません。それは別のサーバーにあります。フェッチすれば、それが変更されたかどうかが分かります。タイマーを使うことに決めました。 – Gokulnath

+0

クール。別のサーバー上にあっても、データが変更されたときに別のサーバーが送信できるWebサービスエンドポイントをアプリケーションに設定し、Webサービスのコードですべてのクライアントにブロードキャストを送信できます。しかしタイマーが合うなら、それもいいです:)ただ、あなたがSystem.Threading.Timerを使用していることを確かめてください。 –

+1

データを比較した後、私はブロードキャストのためにHub.GetClients ().javascriptMethod(msg)を使用しています。とにかく、接続されているクライアントがあるかどうかを調べることができるので、クライアントがない場合でも他のサーバーからデータを取得するのを避けることができますか?表示されている場合、setTimeoutの場合、setTimeoutを持つページにユーザーがいる場合にのみ、データが取得されます。 – Gokulnath