返回响应后运行一个函数

时间:2018-02-12 13:52:08

标签: php curl pthreads slim-3

我使用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);
});

2 个答案:

答案 0 :(得分:1)

我明白你要做的是什么,并且线程不是答案。 如前所述,一种解决方案是从主要脚本调用脚本。 一个更优雅的imho,就是打电话给fastcgi_finish_request。它将向请求者返回答案并继续执行脚本。不幸的是,此功能仅适用于PHP-FPM。这是现在的行业标准,但在安装LAMP堆栈时不一定是默认值。

答案 1 :(得分:1)

根据您的要求,可以提供两种解决方案

  1. 队列
  2. 的Cron
  3. Redis 可用作排队服务器。为此,您需要在系统上安装redis服务器。 Redis有predis的php实现。有关Redis的更多详细信息,您可以在Redis official site中阅读。 Beanstalkd 也可以用作排队服务器。

    要了解如何创建cron作业,您可以参考exisitng stackoverflow question

相关问题