我有一个注册表单,它调用可以与我们的CRM API进行交互的PHP脚本,如下所示:
CRM API< - > PHP脚本< - >注册表单
问题是#2,这十几个调用需要大约20秒才能完成,但是注册表单需要的数据是在第一次API调用之后生成的,因此它理论上可以更快地返回该数据并执行其余的操作服务器端没有持有AJAX呼叫打开的全部时间。
我尝试了flush()和ob_flush(),它在处理完成之前向客户端输出帐号id,但是jQuery AJAX连接仍然打开,所以我仍然等待在注册表单端关闭连接在发生任何事情之前。
那么,尽可能快地将该帐户ID返回到表单的最简单方法是什么?
也许使用curl和exec爆发?
if(signing up){
stuff
exec(curl myself, notsignup)
}
else {
bunch of api calls
}
答案 0 :(得分:1)
如果您只需要第一次API调用的信息来返回表单,那么我可能会尝试不同的工作流程:
工作流程需要为开发人员提供更多的工作和协调,但为用户提供响应最快的界面。
答案 1 :(得分:1)
您应该考虑为所需的其余步骤创建单独的流程。一种方法是你可以在#1首次api呼叫完成后完成。它会回复用户,并且不会尝试完成用户端的其余20个呼叫。
然后创建一个完成剩下部分的队列。您总是可以在mysql中创建一个表来存储队列。
接下来只需创建一个将在后台运行的cronjob,将队列排除在外。
注意:你不会希望这个cronjob只是启动而且永远不会停止。也许让它每5分钟运行一次,但在它开始运行之前,检查另一个cron是否还在进行中。如果是,那么它将在另外5分钟检查以确定是否可以运行。
希望这有帮助!