2017-10-20 41 views
0

コンソールでのように画面/ページ/ビューに進捗状況を表示したい。私は[インストール]ボタンをクリックしますときに、私の「テキストエリア」コントロールは 動作完了 接続b.sqlスクリプトを実行している a.sqlデータベース 接続成功 実行中のスクリプトへの接続asp.net mvc -viewリアルタイムの進捗状況を表示

のような進捗状況の表示を開始

    を閉鎖しなければなりません
  1. textareaはこの目的のための正しいコントロールですか?
  2. それはサーバーからクライアントへの旅行が多すぎるように見えますが、画面上に進行状況を書き込むにはどうすれば最小限に抑えることができますか?

答えて

1

一般的なアプローチは、1秒ごとにajaxリクエストを送信し、サーバーから更新を求めることです。

<div> 
    <pre id="status"> 
    </pre> 
</div> 

setInterval(function() { 
    $.ajax("/getUpdate?someParam=1234").then(function (result) { 
     // result is whatever JSON object you send from the server 
     $("#status").innerText = result.someProp; 
    }); 
}, 1000); 

これは、上記のようなものです。毎秒リクエストを行い、サーバからのメッセージをpre要素に格納していることに注意してください。

2

SignalRを使用すると、ブラウザーのバージョンに基づいて使用される基礎となるテクノロジーのすべての手間を簡略化し、最適な通信プロトコル(WebSocket、LongPolling..etc)を選択して、 。

SignalRの背後にある、使用されているテクノロジの1つがウェブソケットです。サーバとクライアント間でオープンな全二重チャネルを維持する以外は何も送信しません。最も一般的なサイトでは、サーバーとクライアントの間にオープンチャネルを維持するためのWebソケットが使用されています。

SignalRは実際にWebsocketを使用しますが、Websocketの接続アップグレードをサポートしていない古いブラウザの場合など、長いポーリングを使用するようにダウングレードします。

クライアントが新しいブラウザを使用することが確実である場合に備えて、ウェブソケットを直接使用することもできます。

最後に、重大な負荷がかかるサイトとしてのStackoverflowは、たとえば新しい回答やコメントがあると、Webソケットを使用して更新します。

+0

単一のステータスページの場合、これは通常は過剰です。メッセージを常に受信する必要のあるSPAをお持ちでしたら、SignalRもお勧めしますが、短期間のページしか持たない場合は、シグナルが大幅に増加します。 – caesay

+0

基本的な技術はwebsocketsであり、サーバーとクライアントの間で開いている全二重チャネルを維持する以外は何も送信しません。サーバーの更新によってクライアントにこの更新がプッシュされます。最も一般的なサイトでは、サーバーとクライアントの間にオープンチャネルを維持するためのWebソケットが使用されています。 – msoliman

+0

SignalRは実際にWebSocketを使用しますが、WebScoket接続のアップグレードをサポートしていない古いブラウザでは、長いポーリングを使用するようにダウングレードします。大規模で重い読み込みサイトとしてWebSocketを使用して新しい回答またはコメントが更新されるため、stackoverflow – msoliman

関連する問題