gpt4 book ai didi

php - web api中php中的异步函数

转载 作者:行者123 更新时间:2023-11-29 12:12:26 25 4
gpt4 key购买 nike

嗨,我不是服务器端的大专家。我编写了一个很长的 Web 服务函数,它执行大量查询和处理,通常有时它会在函数结束时向 1-20 名 iPhone 用户发送推送通知。

现在,在编写向 iPhone 用户发送大规模推送通知时,您必须在每次推送之间延迟 1 秒。这将使简单的 api 查询花费 30 秒之类的时间。

我想避免这种情况,当我调用 web api 时,有什么方法可以运行所有代码并在服务器内启动一个新线程或页面并发送推送通知而不停止原始 api,同时将数据发送回移动应用程序在服务器上单独运行一个函数来发送推送通知。

我们不想使用任何 cron 作业,web api 正在计算用户列表,因此推送功能只能在内部调用。

$this->sendPushNotification($friendsList, $userId);
$response = array(
'error'=>false,
'invalidKey'=>false,
'message'=>"Your query has completed"
);
$this->jsonOutput($response);

现在我想在查询完成后立即发送 jsonOutput,而不用等待 sendPushNotification 完成。简单地说,我想在 php 中异步运行该函数。

最佳答案

我相信您想为队列中的每个项目生成或 fork 一个 PHP 进程。

看看这些two questions .了解 pthreads .还有一篇很棒的帖子 here关于多任务处理和异步处理:

<?php

function work() {
/* Do some work */

return 'result';
}

$dispatcher = new Amp\Thread\Dispatcher;

// call 2 functions to be executed asynchronously
$promise1 = $dispatcher->call('work');
$promise2 = $dispatcher->call('work');

$comboPromise = Amp\all([$promise1, $promise2]);
list($result1, $result2) = $comboPromise->wait();

编辑

如果您的推送脚本是 push.php 而您的其他脚本是 api.php:

<?php 

function processAll() {
exec('nohup /usr/bin/api.php > /dev/null 2>&1 &');
exec('nohup /usr/bin/push.php > /dev/null 2>&1 &');
}

编辑 2

您需要能够熟练地编写命令行脚本。在尝试将它们塞进 exec() 之前,确保您可以在命令行上自己运行它们 - 您可能需要在命令前加上 php,即 nohup/usr/bin/php 脚本.php(同样,您可以在命令行中运行它进行测试)。

关于php - web api中php中的异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33029188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com