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
と呼ばれています。
助けていただけたら幸いです!ありがとう!
これは実際に可能な方法のようです。私の研究から、これはブラウザがサーバーとの接続を維持しようとする機能であることがわかります。だから私は自動再接続機能を無効にするか、手動で接続クライアント側を閉じるためにストリームの最後をキャッチする必要があります。それを行う方法、出来事はありますか?または特定のメッセージを送信する必要がありますか? – Ours
クライアントサイドで 'eventSource.onerror = function(e){ if(this.readyState == EventSource.CONNECTING){this.readyState == EventSource.CONNECTING}'を試してみてください。あなたの接続があなたのブラウザの上にあるとき、それを回復しようとしているようで、この場合あなたはあなたの仕事をすることができます –
申し訳ありません、最後のコメントに誤植があります。私は意味した:eventSource.onerror = function(e){if(this.readyState == EventSource.CONNECTING){closing ...}} –