首先我要说,这在我的本地机器上完美运行。下面的js示例连接到stream.php,并每秒接收一次服务器当前时间的连续更新。
index.php
var source = new EventSource("stream.php");
source.addEventListener('message', function(e) {
console.log(e);
}, false);
source.addEventListener('open', function(e) {
console.log(e);
}, false);
source.addEventListener('error', function(e) {
if (e.readyState == EventSource.CLOSED) {
console.log('closed');
}
}, false);
stream.php
while(true)
{
// Headers must be processed line by line.
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
// Set data line
print "data: " . date( 'G:H:s', time() ) . PHP_EOL . PHP_EOL;
// Toilet
flush();
// Wait one second.
sleep(1);
}
我上传到实时开发服务器后,预计会有一些延迟。但在我看到第一条记录之前,需要等待约15至20分钟的时间。
连接没有中断。(可能已经进行了40多分钟)。这只是 Apache 循环问题(意味着是时候查看 WebSockets 了),还是我可以采取某些措施来解决这个问题?
server.php
只是在运行,而且虽然我相信睡眠时间不计入总运行时间(如果它被计算为“系统调用”,那么您的脚本允许运行的时间可能有限制(默认为30秒)。因此,虽然大部分时间都花在了sleep
上,但仍存在限制:http://www.php.net/manual/en/info.configuration.php#ini.max-execution-time - Nanne