我已经构建了一个应用程序,它在某些时候使用服务器发送事件,从一个长时间运行的 php 脚本发送,以更新前端的进度条。在我遇到了刷新 php 脚本输出的典型问题并尝试了我在 SO 上读到的所有可能的解决方案之后,我得出结论,使其工作的唯一方法是通过回显一个长字符串来强制输出的空间。将消息发送到浏览器的函数如下:
function sendMsg($id, $array) {
echo "id: $id" . PHP_EOL;
echo "data: ".json_encode($array).PHP_EOL;
echo PHP_EOL;
flush();
ob_flush();
echo str_repeat(' ', 4096);
}
脚本的标题如下:
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
在我使用的 PC 上,一切似乎都运行良好,但当我在姐姐的笔记本电脑上测试应用程序时,我注意到 Firefox 和 Chrome 出现了这种奇怪的行为。在收到前 2 条消息后,他们断开连接。Firefox 尝试重新连接,Chrome 抛出一个错误,上面写着:
EventSource 响应的 MIME 类型(“text/html”)不是“text/event-stream”
所有 PC 的浏览器版本完全相同(分别为 39.0 和 43.0.2357.134m)。我姐姐的笔记本电脑运行 Windows 7 Home Premium SP1。
如何解释这种不同的行为?它是否取决于浏览器的设置,还是可能归因于某些系统范围的设置?我姐姐笔记本电脑上的 IE 10 没有出现问题。