$res['code'] = 200;//这里进行计算生成数据,但生成的数据不是用户急需的,//没有想到其它方式可以触发这个计算程序,所以只能设计最后一个用户提交后计算,//由于数据量大,用户等待返回的时间由计算时间决定,可不可以先返回给用户再计算,怎么操作?$this->ajaxReturn($res);//只需返回 code=200 给用户
Reply content:
$res['code'] = 200;//这里进行计算生成数据,但生成的数据不是用户急需的,//没有想到其它方式可以触发这个计算程序,所以只能设计最后一个用户提交后计算,//由于数据量大,用户等待返回的时间由计算时间决定,可不可以先返回给用户再计算,怎么操作?$this->ajaxReturn($res);//只需返回 code=200 给用户
The computing business to be done is first pushed into MQ, the task queue, which can be done with Redis.
Linux runs scripts that have been consuming queues.
Use Redis to implement a queue, each time to put the relevant information in the queue, and then return to the user code, the data in the queue to run with a script
Gearman
http://gearman.org/
That's what you need.
Asynchronous operation
Take the calculation as a task, put it in the queue, have a script running, get the task from the queue, and then process it in the background.
This is the need for so-called Message Queuing, you can see the Rabbitmq,gearman and other Message Queuing.
I have written here a PHP rabbitmq use method, you can see.
https://segmentfault.com/a/1190000004924668
It's a good idea to put computing tasks in the message team, as the big gods mentioned above. But you need to build a queue service.
If the computational amount is not particularly large, is it easier to fork a process to solve it?
Refer to the Onendrequest method of the request object of the YII framework, which is a method that can implement an asynchronous call.
Agree @zyxcba answer, if the volume is not enough, you can first flush out the data, and then fork a process to handle the specific computing tasks, but pcntl
the extension can only be used on Linux.
If the calculated data does not need to be returned to the user, you can return to continue executing the code. PHP-FPM can use this Fastcgi_finish_request,echo return value, Fastcgi_finish_request (), followed by the execution .... Or just use the queue.