2013-04-24 59 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