在某些应用中,您有时需要进行与响应无关的处理。例如,在聊天消息等之后发送推送通知。此类任务对您将返回给用户的响应没有影响。
运行此类任务的最佳方法是什么?
在博客的API中的示例,在创建帖子之后我想将201发送到客户端和结束连接。然后我想发送一个curl调用推送通知服务器,或触发一些数据分析并将其保存到磁盘。但我不希望用户等待这样的任务结束。我能想到的方法 1.发送连接:封闭和内容长度标头和清除响应,但这与所有服务器兼容,并非所有浏览器都兼容。 2.使用php exec函数触发任务! ?但是如何将json对象传递给该函数呢:/?
所以我们如何能够以一种适用于任何服务器设置的方式在php的异步行为中完成此任务?
答案 0 :(得分:1)
您可以通过使用curl向wp-cron.php
发送HEAD
请求来举例说明WordPress如何触发wp-cron.php
功能,这完全符合您发送请求的想法而不是等待响应。
答案 1 :(得分:0)
我会用这段代码来做: 使用php的register_shutdown_function注册尽可能多的函数:
register_shutdown_function('background_function_name_1');
register_shutdown_function('background_function_name_2');
在html结束标记(如果有)之后写下所有输出已打印的行(根据脚本执行的上限调整时间限制):
ignore_user_abort(true);
set_time_limit(120);
header('Connection: close');
header('Content-Length: ' . ob_get_length());
ob_end_flush();
flush();
此处服务器将输出发送到浏览器,所有注册的功能将按照注册顺序调用。