2013-04-24 64 views
1

我在看Server-Sent Events,因爲客戶端在共享主機,我不能使用websockets。服務器發送的Evenets:更改時間間隔

我已經測試了W3School's example,它正在beautifuly.My代碼如下所示:

index.php文件(相關部分):

<script> 
    var source=new EventSource("data.php"); 
    source.onmessage=function(event) 
    { 
     document.getElementById("result").innerHTML+=event.data + "<br>"; 
    }; 
</script> 

Data.php:

<?php 
header('Content-Type: text/event-stream'); 
header('Cache-Control: no-cache'); 

$time = date('r'); 
echo "data: The server time is: {$time}\n\n"; 
flush(); 
?> 

現在,我得到的輸出如下所示:

The server time is: Wed, 24 Apr 2013 13:31:25 +0200 
The server time is: Wed, 24 Apr 2013 13:31:28 +0200 
The server time is: Wed, 24 Apr 2013 13:31:31 +0200 
The server time is: Wed, 24 Apr 2013 13:31:34 +0200 
The server time is: Wed, 24 Apr 2013 13:31:37 +0200 
The server time is: Wed, 24 Apr 2013 13:31:40 +0200 
The server time is: Wed, 24 Apr 2013 13:31:43 +0200 
The server time is: Wed, 24 Apr 2013 13:31:46 +0200 
The server time is: Wed, 24 Apr 2013 13:31:49 +0200 

我注意到了,那time-interval這裏是3秒。
我的問題是:如何更改此時間間隔?
data.php我打算有一個代碼發送請求並獲取響應,但請求的數量是有限的,所以我需要使該間隔更大。

這是解決問題的好方法,還是應該使用polling

對不起,如果我不夠清楚,我真的不知道如何描述問題。
謝謝!

+1

https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events此鏈接可能會有幫助。此外,[w3schools在這裏(不知何故)被棄用](http://w3fools.com)。 – Passerby 2013-04-24 11:55:05

+0

@Passerby:謝謝你的鏈接,會檢查! :) – intelis 2013-04-24 11:57:14

回答

2

你可能不喜歡這樣,但事實是 - 你沒有正確使用它。

PHP腳本不應該終止 - 您應該使用循環。有了這個循環,你也可以控制時間間隔(最簡單的方法是sleep($seconds))。

while(true) { 
    $time = date('r'); 
    echo "data: The server time is: {$time}\n\n"; 
    flush(); 
    sleep(3); // interval: 3 seconds 
} 

你的腳本似乎工作的原因是,瀏覽器總是試圖重新建立連接,因爲該事件流終止(由瀏覽器視爲錯誤)。然而,這與每隔X秒輪詢一次服務器並無不同,消除了事件流的優勢。

此外,Apache和PHP不建議用於事件流 - Apache不適用於無限期保持打開的連接(這可能不再是真實的 - 沒有保持最新狀態)以及許多託管服務器限制PHP腳本的執行時間。要麼使用不同的Web服務器,要麼使用輪詢來避免潛在的問題。

+0

因此,如果我正確使用SSes,data.phh的請求只發送一次,並且它保持打開狀態?確實是 – intelis 2013-04-24 11:58:46

+0

。這是輪詢的主要優點 - 建立新連接的所有開銷不適用。另外還可以在新事件可用時立即發送,而不需要固定的時間間隔。 – MarioP 2013-04-24 12:03:39

+0

是的,w3schools錯了。 – boisvert 2013-04-24 12:05:12