是否有任何理智的方式在PHP中异步发出HTTP请求而不丢弃响应?即,类似于AJAX的东西 - PHP脚本启动请求,它是自己的事情,之后,当收到响应时,回调函数/方法或其他脚本处理响应。
我想到了一种方法 - 使用另一个脚本为每个请求生成一个新的php进程 - 第二个脚本执行请求,等待响应,然后解析数据并执行任何操作,而原始脚本继续产生新的过程。不过,我对这种情况下的性能表示怀疑 - 每次必须创建一个新进程必然会有一些性能损失。
答案 0 :(得分:9)
是的,根据您网站的流量,为运行脚本生成单独的PHP流程可能具有破坏性。使用shell_exec()来启动后台进程将输出保存到您已知的文件名会更高效,但即使这样也可能是资源密集型。
您还可以在数据库中存储请求队列。一个单独的后台进程将拉取作业,执行它并保存输出,可能在您的Web进程可以检查的数据库中设置一个标记。
如果您要使用数据库队列方法,请使用curl_multi *类函数立即发送所有排队的请求。这会将后台进程中每次迭代的执行时间限制为最长的请求时间。
答案 1 :(得分:3)
V5可能没有线程,但您可以创建利用进程内多任务处理的应用程序。
查看以下文章:“使用PHP V5开发多任务应用程序” IBM DeveloperWorks。你可以在http://www.ibm.com/developerworks/web/library/os-php-multitask/
找到它