2016-10-28 12 views
1

jsとHTML5を使用したServerSendイベントはかなり新しいです。 APIを呼び出すページを持つ基本的な設定があり、APIはコマンドラインを実行し、この呼び出しの結果をリアルタイムで表示しようとしています(APIはサーバー上でスクリプトを呼び出していますコンソール出力)。HTML5/Javascript SSE制限回数

私の問題は、ページが開いたままの場合、APIが呼び出され続けることです。私はこの動作を停止し、APIを1回だけ呼び出すことを望みます。私はイベントソースを一度だけ定義するためにブール値を使ってみましたが、運がありませんでした。

function liveExec($scenarioId){ 
    var $run = true; 
    if ($run) 
    { 
     var source = new EventSource('/run/'+$scenarioId+'/1'); 
     source.onmessage = function(event) { 
     document.getElementById("result").innerHTML += event.data + "<br>"; 
    }; 
    $run= false; 
    } 
} 

機能をボタンクリックで呼び出されます。

は、ここに私のJSコードです。ここ は私のアクセスログである:目に見え関数が何らかの理由で25秒ごと

127.0.0.1 - - [28/Oct/2016:11:09:06 +0200] "GET /run/1/1 HTTP/1.1" 200 2318 
127.0.0.1 - - [28/Oct/2016:11:09:31 +0200] "GET /run/1/1 HTTP/1.1" 200 2318 
127.0.0.1 - - [28/Oct/2016:11:09:56 +0200] "GET /run/1/1 HTTP/1.1" 200 2318 
127.0.0.1 - - [28/Oct/2016:11:10:21 +0200] "GET /run/1/1 HTTP/1.1" 200 2318 
127.0.0.1 - - [28/Oct/2016:11:10:47 +0200] "GET /run/1/1 HTTP/1.1" 200 2317 

と呼ばれています。

助けていただけたら幸いです!ありがとう!

答えて

1

最初に実行した後にsource.close();を使用して接続を閉じるとどうなりますか?

+0

これは実際に可能な方法のようです。私の研究から、これはブラウザがサーバーとの接続を維持しようとする機能であることがわかります。だから私は自動再接続機能を無効にするか、手動で接続クライアント側を閉じるためにストリームの最後をキャッチする必要があります。それを行う方法、出来事はありますか?または特定のメッセージを送信する必要がありますか? – Ours

+0

クライアントサイドで 'eventSource.onerror = function(e){ if(this.readyState == EventSource.CONNECTING){this.readyState == EventSource.CONNECTING}'を試してみてください。あなたの接続があなたのブラウザの上にあるとき、それを回復しようとしているようで、この場合あなたはあなたの仕事をすることができます –

+0

申し訳ありません、最後のコメントに誤植があります。私は意味した:eventSource.onerror = function(e){if(this.readyState == EventSource.CONNECTING){closing ...}} –

関連する問題