【发布时间】:2018-08-21 19:19:43
【问题描述】:
我在 PHP/jQuery 中使用服务器端事件。这是客户端:
var evtSource = new EventSource("testsse.php");
evtSource.onmessage = function(e) {
// DO SOMETHING WITH e
}
这是服务器端文件:testse.php
header("Content-Type: text/event-stream\n\n");
while (1) {
echo "message";
ob_flush();
flush();
sleep(1);
}
它工作正常,但是当客户端关闭浏览器或断开连接时,testse.php 继续运行。我的问题是我们很快就会有许多正在运行的脚本使服务器超载。我已经阅读了以下问题:
我已经阅读了以下问题:
- How can i stop a server sent event script from running when the user closes the page? PHP(无法修改apache配置)
- Does php execution stop after a user leaves the page?
- How do server-sent events actually work?
- How to stop Server-Sent Events
最后一个很有趣,但最后是服务器告诉客户端这是结束了。在我们的例子中,我们希望脚本在客户端关闭时自动消失。一种解决方案是在选项卡或浏览器关闭时触发事件 (Detect browser or tab closing)。但不幸的是,众所周知,这种解决方案是不可靠的。在我看来,这不是一个“专业”的选择。
有没有办法在客户端退出时正确终止服务器端脚本?
【问题讨论】:
-
是的,正如我所提到的,我已经阅读了这个解决方案。但是我无法访问服务器上的apache配置。
-
您在编辑问题后提到了这一点。
-
可以在 PHP 中使用多线程,可以使用套接字和可靠的
socket_select()函数。您不必为每个连接运行一个 PHP 脚本。让一个脚本处理多个连接。 -
您的 PHP 脚本是否作为 Apache 模块运行?如果没有,它是如何启动的?
标签: javascript php jquery server-sent-events