我开始使用JavaScript EventSource对象在HTML5中使用推送技术。我对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后我的脚本没有终止?!
谢谢您的帮助!—
EventSource.close()
并不会关闭或中止连接本身! - Julian F. Weinert