Я начал использовать push в HTML5, используя объект JavaScript EventSource. Я был полностью доволен рабочим решением на 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);
}
Но внезапно мое веб-приложение стало недоступным из-за ошибки MySQL «слишком много подключений».
Оказалось, что соединение MySQL не закрывается после закрытия источника события в JavaScript:
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()
не закрывает и не прерывает само соединение! - person Julian F. Weinert   schedule 16.10.2012