4

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

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

4

1 に答える 1

5

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

もう 1 つの利点は、SignalR が利用可能な最高のテクノロジを使用してサーバーからブラウザーにプッシュするため、心配する必要がないことです。これは、ASP.NET 4.5 を使用して Windows 8 サーバーでサーバーを実行している場合は WebSockets である可能性があり (おそらく将来の考慮事項)、クライアントが Chrome、Firefox または Opera である場合は Server Sent Events、クライアントが IE である場合は Forever Frame です。いずれにせよ、心配する必要はありません。SignalR がトランスポート管理を処理します。

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

于 2011-12-09T17:28:26.640 に答える