我现在面临的问题是我不知道如何在PHP中实现非阻塞请求。在我的应用程序中,任何用户活动都被归档,并且此归档过程可能需要一些重要时间 - 最多5-10秒。由于此用户界面(在JavaScript中)不再响应,因为它还取决于对服务器的请求。所以,假设我向服务器发出了这样的请求(使用ExtJS
库,这里没关系):
Ext.Ajax.request({
url:'/handlers/archive.php', // my handler which I want to make non-blocking
method:'POST',
params:{...} // some parameters submitted to the server
});
... here are other multiple request to the server
... they are now waiting for the completion of heavy archive.php procedure
那么,如何使这个php程序真正无阻塞?任何非阻塞程序的工作示例都会非常有用。
答案 0 :(得分:1)
如果您希望客户端获得快速响应并继续处理服务器端的数据,则必须为此实现某种机制
例如:
您可以使用RabbitMq或任何其他队列系统/消息系统
答案 1 :(得分:1)
真正的multi-threaded PHP在网络应用中很棘手,除非您的网络服务器设置为处理它,例如通过Apache's MPM Worker。
在这种情况下,我认为最好的办法是将exec()用于fork a curl command:
$req = "curl -X POST -H 'Content-Type: application/json'";
$req.= " -d '" . $payload . "' " . "'" . $url . "'";
$req .= " > /dev/null 2>&1 &";
exec($req);