PHP中的异步HTTP请求

PHP中的异步HTTP请求,php,http,asynchronous,request,curl-multi,Php,Http,Asynchronous,Request,Curl Multi,有没有一种明智的方法可以在PHP中异步发出HTTP请求而不抛出响应?也就是说,类似于AJAX的东西——PHP脚本启动请求,做自己的事情,然后,当收到响应时,回调函数/方法或其他脚本处理响应 我想到了一种方法——为每个请求生成一个新的php进程和另一个脚本——第二个脚本执行请求,等待响应,然后解析数据并执行它应该执行的任何操作,而原始脚本继续生成新进程。不过,我对这种情况下的性能表示怀疑——每次都必须创建一个新的进程,这肯定会对性能造成一定的损失。是的,根据您站点的流量,生成一个单独的PHP进程来

有没有一种明智的方法可以在PHP中异步发出HTTP请求而不抛出响应?也就是说,类似于AJAX的东西——PHP脚本启动请求,做自己的事情,然后,当收到响应时,回调函数/方法或其他脚本处理响应


我想到了一种方法——为每个请求生成一个新的php进程和另一个脚本——第二个脚本执行请求,等待响应,然后解析数据并执行它应该执行的任何操作,而原始脚本继续生成新进程。不过,我对这种情况下的性能表示怀疑——每次都必须创建一个新的进程,这肯定会对性能造成一定的损失。

是的,根据您站点的流量,生成一个单独的PHP进程来运行脚本可能是毁灭性的。使用shell_exec()启动后台进程,将输出保存到您已经知道的文件名会更有效,但即使这样也可能会占用大量资源

您还可以将请求队列存储在数据库中。一个单独的后台进程将提取作业,执行作业,并保存输出,可能会在数据库中设置一个标志,以便web进程检查


如果要使用DB队列方法,请使用curl_multi*类函数一次发送所有排队的请求。这会将后台进程中每个迭代的执行时间限制为最长的请求时间。

V5可能没有线程化,但您可以创建利用进程内多任务的应用程序

请参阅以下文章:“使用PHPV5开发多任务应用程序” IBMdeveloperWorks。你可以在这里找到它