我使用Slim 3创建了一个API。
在其中我有一些卷曲执行,例如向用户发送推送通知。
我希望向请求者发送响应,然后执行curl或任何其他功能。
我在PHP
中读到了线程并使用pthreads-polyfill
,但它在完成线程后发送响应。
示例测试代码:
$app->get('/test', function (Request $request, Response $response) {
PushController::publish("1111111", "HELLO");
$result = 'OK';
return $response->getBody()->write($result)->withStatus(200);
});
答案 0 :(得分:1)
我明白你要做的是什么,并且线程不是答案。 如前所述,一种解决方案是从主要脚本调用脚本。 一个更优雅的imho,就是打电话给fastcgi_finish_request。它将向请求者返回答案并继续执行脚本。不幸的是,此功能仅适用于PHP-FPM。这是现在的行业标准,但在安装LAMP堆栈时不一定是默认值。
答案 1 :(得分:1)
根据您的要求,可以提供两种解决方案
Redis 可用作排队服务器。为此,您需要在系统上安装redis服务器。 Redis有predis的php实现。有关Redis的更多详细信息,您可以在Redis official site中阅读。 Beanstalkd 也可以用作排队服务器。
要了解如何创建cron作业,您可以参考exisitng stackoverflow question