运行 返回响应后的函数
Run a function after returning response
我有一个 API 使用 Slim 3 创建的。
其中我有一些 curl 执行,例如向用户发送推送通知。
我想向请求者发送响应,然后执行 curl 或任何其他功能。
我在 PHP
中阅读了有关 Threads 的内容并使用 pthreads-polyfill
但它在完成 Thread 后发送响应。
示例测试代码:
$app->get('/test', function (Request $request, Response $response) {
PushController::publish("1111111", "HELLO");
$result = 'OK';
return $response->getBody()->write($result)->withStatus(200);
});
我明白你想做什么,线程不是答案。
正如您提到的,一种解决方案是从主脚本调用脚本。
恕我直言,一个更优雅的方法是调用 fastcgi_finish_request 。它将return回答请求者并继续执行脚本。不幸的是,此功能仅适用于 PHP-FPM。这是目前的行业标准,但在安装 LAMP 堆栈时不一定是默认设置。
根据您的要求,可能有两种解决方案
- 队列
- 定时任务
Redis可以作为排队服务器。为此,您需要在系统上安装 redis 服务器。 predis for Redis. For more details about Redis you can read it in Redis official site 有 php 实施。 Beanstalkd 也可以用作队列服务器。
要了解如何创建 cron 作业,您可以参考现有的 Whosebug question
我有一个 API 使用 Slim 3 创建的。
其中我有一些 curl 执行,例如向用户发送推送通知。
我想向请求者发送响应,然后执行 curl 或任何其他功能。
我在 PHP
中阅读了有关 Threads 的内容并使用 pthreads-polyfill
但它在完成 Thread 后发送响应。
示例测试代码:
$app->get('/test', function (Request $request, Response $response) {
PushController::publish("1111111", "HELLO");
$result = 'OK';
return $response->getBody()->write($result)->withStatus(200);
});
我明白你想做什么,线程不是答案。 正如您提到的,一种解决方案是从主脚本调用脚本。 恕我直言,一个更优雅的方法是调用 fastcgi_finish_request 。它将return回答请求者并继续执行脚本。不幸的是,此功能仅适用于 PHP-FPM。这是目前的行业标准,但在安装 LAMP 堆栈时不一定是默认设置。
根据您的要求,可能有两种解决方案
- 队列
- 定时任务
Redis可以作为排队服务器。为此,您需要在系统上安装 redis 服务器。 predis for Redis. For more details about Redis you can read it in Redis official site 有 php 实施。 Beanstalkd 也可以用作队列服务器。
要了解如何创建 cron 作业,您可以参考现有的 Whosebug question