我编写了一些代码来查询数据库中的更改并发送事件。 这是我的PHP脚本代码
header("Content-Type: text/event-stream");
header('Cache-Control: no-cache');
//****Some code here to query the database
echo "event: message\n";
echo "data: change_from_database \n";
echo "\n\n";
ob_flush();
flush();
我依赖浏览器自动重新连接每次连接关闭,所以我没有在服务器代码中实现任何循环。此外,我从这个线程了解到,实现一个无限循环有很多缺点。
因此,客户端一切都正常运作:每当连接关闭时,浏览器会重新连接并在服务器发送事件时触发一个事件;但是除了Firefox(40.0.2),它不会重新连接。我知道它不会重新连接,因为我编写了一些JavaScript错误检查代码来测试它:
var evtSource = new EventSource("../sse.php");
evtSource.onerror = function(event){
var txt;
switch( event.target.readyState ){
case EventSource.CONNECTING:
txt = 'Reconnecting...';
break;
}
console.log(txt);
}
比如,在每秒钟的时间间隔里,Chrome浏览器的控制台会打印出"Reconnecting"
。而火狐浏览器只会重新连接一次并且不会再次尝试。
我该如何编写代码来使其在火狐浏览器上正常工作,并且对于其他支持服务器发送事件但不会自动重新连接的浏览器也能起作用呢?
header('Transfer-Encoding: identity');
测试一下你的代码吗?我不知道它是否有帮助,只是建议。 - Wizard