终止与jQuery AJAX请求的连接,继续在服务器端处理php?

问题描述:

我有一个调用一个PHP脚本,可以与我们的CRM的API进行交互,像这样一个注册表格:终止与jQuery AJAX请求的连接,继续在服务器端处理php?

CRM API < - > PHP脚本< - >注册表格

  1. 的注册表格通过在一个 AJAX调用
  2. PHP脚本的一些信息到PHP脚本运行十几个API调用到CRM创建 一个帐户,并连接各种数据
  3. 的CRM返回新的帐户ID,它只是创造d到PHP脚本
  4. 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分钟后检查是否可以运行。

希望这会有所帮助!

+0

我结束了去卷曲路由,因为它更快,并得到它的工作现在。不过,我认为队列和cronjob来处理它们是最好的长期解决方案。 Curl给我买了一些时间,所以我会尽快实现你的答案。感谢Richard! – xref 2012-07-23 16:30:15

+0

我的快乐.... – RichardW11 2012-08-03 12:33:28

如果您只需要在第一个API调用的返回信息的形式,那么我可能会尝试不同的工作流程:

  1. 表单调用PHP脚本
  2. PHP调用第一API调用
  3. PHP返回到窗体
  4. 表格处理响应
  5. 表单调用第二个PHP脚本来完成此过程
  6. PHP完成API调用(此时表单可以放弃,因为它听起来像你不在乎从这里出来会发生什么)。

工作流程需要开发人员多一点工作和协调,但向用户展示了响应速度最快的界面。

+0

我担心这种方法的用户在处理过程中关闭窗体选项卡将导致问题,并留下客户关系管理只有一半填充或有问题... – xref 2012-07-23 16:28:29