我开始使用 JavaScript EventSource 对象在 HTML5 中使用 push。我对 PHP 中的工作解决方案非常满意:
$time = 0;
while(true) {
if(connection_status() != CONNECTION_NORMAL) {
mysql_close()
break;
}
$result = mysql_query("SELECT `id` FROM `table` WHERE UNIX_TIMESTAMP(`lastUpdate`) > '".$time."'");
while($row = mysql_fetch_array($result)) {
echo "data:".$row["id"].PHP_EOL;
echo PHP_EOL;
ob_flush();
flush();
}
$time = time();
sleep(1);
}
但突然间,我的 WebApp 因 MySQL 错误“连接过多”而无法访问。
原来在 JavaScript 中关闭事件源后 MySQL 连接没有关闭:
window.onload = function() {
sse = new EventSource("push.php");
sse.onmessage = function(event) {
console.log(event.data.split(":")[1]);
}
}
window.onbeforeunload = function() {
sse.close();
}
所以我猜PHP脚本不会停止执行。有没有办法die();
在客户端连接断开之前调用函数(如)?为什么我的脚本在调用.close();
EventSource 后没有终止?!
感谢帮助!——</p>