javascript – 服务器发送的事件:如何以跨浏览器方式自动重新连接?

我实现一些代码来查询数据库的任何更改并发送一个事件.
这是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();

每次连接关闭时,我依靠浏览器自动重新连接,所以我不会在我的服务器代码上实现任何循环.另外,从this thread学到,实现无限循环有许多缺点.

所以一切都很好的客户端:每次连接关闭时,浏览器重新连接,每次服务器发送一个事件时触发事件;除了不重新连接的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上的控制台例如记录“重新连接”.另一方面,Firefox重新连接一次,再也不会这样做.

如何编写代码以使其在Firefox,以及其他支持服务器发送事件但不会自动重新连接的浏览器?

最佳答案
您可以使用像这样一个https://github.com/Yaffle/EventSource的polyfill应该将事件源功能添加到不支持的浏览器.

转载注明原文:javascript – 服务器发送的事件:如何以跨浏览器方式自动重新连接? - 代码日志