2016-07-13 7 views
2

私はsend-eventで簡単なクロックを作ります。私のコードは です。クライアントとサーバーはLAN上にあり、ブラウザはiceweasel v.38.7.1です。シンプルサーバーsent-event:30分後にクロックが停止する

PHP:

<?php 
header("Content-Type: text/event-stream"); 
header("Cache-Control: no-cache"); 
header("Connection: keep-alive"); 
function sendMsg($msg) { 
    echo "retry: 1000\n"; 
    echo "data: $msg" .PHP_EOL; 
    echo PHP_EOL; 
    ob_flush(); 
    flush(); 
} 
sendMsg(date("H:i", time())); 

JS

(function get_time() 
{var source = new EventSource('/config/rtc/get_time.php'); 

source.addEventListener('message',function (event) 
    {document.getElementById("orologio").innerHTML=event.data;},false); 

source.addEventListener('error', function(event) { 
if (event.readyState === EventSource.CLOSED) 
{get_time();}},false); 
})(); 

30〜45分間のクロック仕事、それが停止した後、私は間違って行くのです
?ありがとうございます。
ありがとうございます。

+0

サーバータイムアウト? – mplungjan

+0

あなたはそれを使ってデバッグするために開発者コンソールを使うことができますが、コードを見て問題を見つけるのは難しいです – siddhesh

答えて

1

あなたのPHPスクリプトは次のようになります。そうしないと、あなたのPHPスクリプトは常にSSEソケットが閉じ、(完全にSSEを使用してのポイントと離れていた)を閉じると、ブラウザされ

<?php 
header("Content-Type: text/event-stream"); 
header("Cache-Control: no-cache"); 
header("Connection: keep-alive"); 
function sendMsg($msg) { 
    echo "retry: 1000\n"; 
    echo "data: $msg" .PHP_EOL; 
    echo PHP_EOL; 
    ob_flush(); 
    flush(); 
} 
while(true){ 
    sendMsg(date("H:i", time())); 
    sleep(1); 
    } 

その後、自動再接続。理論的には無限ですが、30分後に何かがうんざりすることがあります:-)

スクリプトのタイムアウトが問題になると思いました。だから、あなたが追加する必要があり、あなたのPHPスクリプトの先頭に:

再び
set_time_limit(0); 

、これは間違い無限ループは仕様であることを、あなたはPHPスクリプトが永遠に実行したいと言って、とされていません。

関連する問題