因此,这是一个与语言相关的理论问题,但请考虑一下:
我需要PHP来执行一个相当系统密集的进程(使用PHP exec();
),该进程将在后台运行,但是当用户离开该特定页面时,该进程将被终止。
我很快意识到死人的切换将是一种简单的方法来实现这一点,因为我没有使用任何会话变量或其他服务器端变量,这可能最终看起来像:
if($_SERVER['REQUEST_URI'] !== 'page_with_session.php'){
//Instead of 'session_destroy();' this would be used to kill said process
}
在任何情况下,在PHP中使用while循环,在Python脚本中重置计时器或每15秒重新调用一次该脚本,以便它不会到达终点并终止进程。但是,当用户离开页面时,脚本将被调用,但在终止进程之前无法重置。
这个想法是否有任何漏洞?如果没有,PHP / JS中的实现如何?我看到它的工作顺序是:
<?php exec('killer.py') ?>
os.system('pkill process')
<?php while(true){sleep(15); exec('killer.py no_wait_dont');} ?>
非常感谢你们的任何想法!
梅森
答案 0 :(得分:3)
Javascript更容易,而且安全(即不多)。
只需编写一个javascript ping函数,每隔10秒就会发一次ping.php(通过ajax)。这个ping.php将在用户会话中收到最后一次ping时记录(比如$_SESSION['last_ping']
)
您可以通过将$_SESSION['last_ping']
与当前时间进行比较来检查其他网页的用户活动。你必须用这个来运行你的运行时密集型页面,但它肯定会起作用。
答案 1 :(得分:2)
在JS中实现心跳。如果它停止超过一定时间,则终止子进程:
如果无法将自毁机制添加到子进程,则需要一个能够接收信号并终止子进程的观察程序进程。它不太可靠,因为您需要确保观察程序进程正在运行。