我已经打破了局面。
我有一个代理网站,我的共享主机帐户允许我的帐户最多25个进程。 我刚刚开始使用会话锁对来自sinlge用户的多个请求进行排队。这意味着如果已经有请求或用户已经在流式传输视频,那么他的下一个请求将等待,直到流式传输结束。 (而且我必须应用这一点,因为用户一次开始使用下载程序下载多个视频。下载程序更糟糕的是,他们通常会单次下载4次。这样,只有一个用户正在使用我的所有资源。 )
当前的问题是,正在等待的第二个请求也需要一个单独的过程。这样,只有两个用户可以达到我的最大25个进程限制。
我正在寻找PHP配置以使会话锁等待超时,在那之后(如:20秒),PHP应该关闭与任何消息的连接。所以我们可以发布只是等待的过程。
如果有人知道任何Linux解决方案,请告诉我。
是否有任何linux命令可以让所有进程运行php scrips并处于等待模式?
提前致谢。
答案 0 :(得分:1)
提出此问题的人可能为时已晚,但可以在脚本结束使用函数session_write_close()之前解锁会话。你可以这样做:
<?php
session_start();
// ... use and/or update session data
session_write_close();
// begin streaming
header("Content-Type: foo/bar");
$f=fopen("hundred-meg-video.mp4","rb");
fpassthru($f);
fclose($f);
?>
或者,您可以在流结束时重新打开会话。我们使用它来限制每用户下载的并发数量:
<?php
$limit=4;
session_start();
if ($_SESSION["concurrent_downloads"]>$limit) {
header("HTTP/1.1 500 Internal Server Error");
echo "too many concurrent downloads";
die;
}
ignore_user_abort(1); // if the user aborts the script, we still want it to continue running on the server
// otherwise the $_SESSION["concurrent_downloads"] would not decrease at its end
$_SESSION["concurrent_downloads"]++;
session_write_close();
// begin streaming
header("Content-Type: foo/bar");
$f=fopen("hundred-meg-video.mp4","rb");
fpassthru($f);
fclose($f);
// resume using session
@session_start(); // @ used to suppress "headers already sent" message
$_SESSION["concurrent_downloads"]--;
?>
答案 1 :(得分:0)
找不到任何PHP选项'会话锁定超时'
要列出所访问的会话文件,请尝试lsof |grep session
你应该得到这样的输出
16uW的行是锁定实际会话文件的PHP进程