终止与jQuery AJAX请求的连接,继续在服务器端处理php?
我有一个调用一个PHP脚本,可以与我们的CRM的API进行交互,像这样一个注册表格:终止与jQuery AJAX请求的连接,继续在服务器端处理php?
CRM API < - > PHP脚本< - >注册表格
- 的注册表格通过在一个 AJAX调用
- PHP脚本的一些信息到PHP脚本运行十几个API调用到CRM创建 一个帐户,并连接各种数据
- 的CRM返回新的帐户ID,它只是创造d到PHP脚本
- PHP脚本将帐户ID传递回注册表单,此时AJAX调用已完成,并且注册表单可以继续。
的问题是#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
}
您应该考虑为剩下的步骤创建一个独立的进程。一种方法是,你可以在#1的第一个API调用完成之后。它回应用户,并且不尝试在用户端完成20个呼叫的其余部分。
然后创建一个队列来完成剩下的工作。你总是可以在mysql中创建一个表来存储队列。
接下来,只需创建一个将在后台运行的cronjob,敲出队列。
注意:您不希望此cronjob刚刚启动并且从不停止。也许它每5分钟运行一次,但在它开始运行之前,检查是否还有其他cron正在运行。如果是,那么它会在5分钟后检查是否可以运行。
希望这会有所帮助!
如果您只需要在第一个API调用的返回信息的形式,那么我可能会尝试不同的工作流程:
- 表单调用PHP脚本
- PHP调用第一API调用
- PHP返回到窗体
- 表格处理响应
- 表单调用第二个PHP脚本来完成此过程
- PHP完成API调用(此时表单可以放弃,因为它听起来像你不在乎从这里出来会发生什么)。
工作流程需要开发人员多一点工作和协调,但向用户展示了响应速度最快的界面。
我担心这种方法的用户在处理过程中关闭窗体选项卡将导致问题,并留下客户关系管理只有一半填充或有问题... – xref 2012-07-23 16:28:29
我结束了去卷曲路由,因为它更快,并得到它的工作现在。不过,我认为队列和cronjob来处理它们是最好的长期解决方案。 Curl给我买了一些时间,所以我会尽快实现你的答案。感谢Richard! – xref 2012-07-23 16:30:15
我的快乐.... – RichardW11 2012-08-03 12:33:28