php 苗条检测客户端中止 (HTTP)
php slim detect client abort (HTTP)
在 slim framework V3 中,如何检测客户端是否关闭了连接?
我试过:
ignore_user_abort(假);
并尝试在没有运气的循环中检查 connection_status() 和 connection_aborted() 。
php 5.6.12
它不依赖于 Slim,而是依赖于 PHP。 PHP 执行脚本后立即关闭连接。
如果你想创建持久连接,你需要查看长轮询连接。
似乎需要从 php 输出一些东西然后调用 ob_flush() 因为 php 只处理来自浏览器的错误。这是一种不输出任何内容的方法,适用于长轮询场景:
/* returns ESTABLISHED, CLOSE_WAIT, LAST_ACK, etc */
function getConnectionStatus() {
$remote_ip = $_SERVER['REMOTE_ADDR']?:($_SERVER['HTTP_X_FORWARDED_FOR']?:$_SERVER['HTTP_CLIENT_IP']);
$remote_port=$_SERVER['REMOTE_PORT'];
$cmd="netstat -tn | fgrep ' $remote_ip:$remote_port '";
$pfp=popen($cmd,"r");
$buf = fgets($pfp, 1024);
pclose($pfp);
$buf=preg_replace('!\s+!', ' ', $buf); //remove multiple spaces
$buf=trim($buf);
$buf_r=explode(" ",$buf);
if (count($buf_r)) {
$state=$buf_r[count($buf_r)-1];
return trim($state);
}
return "NOTFOUND";
}
使用方法如下:
while(...) {
/* ... longpolling check code here ...*/
if (getConnectionStatus() != "ESTABLISHED") {
break;
}
}
在 slim framework V3 中,如何检测客户端是否关闭了连接?
我试过: ignore_user_abort(假); 并尝试在没有运气的循环中检查 connection_status() 和 connection_aborted() 。
php 5.6.12
它不依赖于 Slim,而是依赖于 PHP。 PHP 执行脚本后立即关闭连接。
如果你想创建持久连接,你需要查看长轮询连接。
似乎需要从 php 输出一些东西然后调用 ob_flush() 因为 php 只处理来自浏览器的错误。这是一种不输出任何内容的方法,适用于长轮询场景:
/* returns ESTABLISHED, CLOSE_WAIT, LAST_ACK, etc */
function getConnectionStatus() {
$remote_ip = $_SERVER['REMOTE_ADDR']?:($_SERVER['HTTP_X_FORWARDED_FOR']?:$_SERVER['HTTP_CLIENT_IP']);
$remote_port=$_SERVER['REMOTE_PORT'];
$cmd="netstat -tn | fgrep ' $remote_ip:$remote_port '";
$pfp=popen($cmd,"r");
$buf = fgets($pfp, 1024);
pclose($pfp);
$buf=preg_replace('!\s+!', ' ', $buf); //remove multiple spaces
$buf=trim($buf);
$buf_r=explode(" ",$buf);
if (count($buf_r)) {
$state=$buf_r[count($buf_r)-1];
return trim($state);
}
return "NOTFOUND";
}
使用方法如下:
while(...) {
/* ... longpolling check code here ...*/
if (getConnectionStatus() != "ESTABLISHED") {
break;
}
}