从php中关闭nusoap,不要等待结果

时间:2009-08-06 15:55:38

标签: php nusoap

我有一个脚本,目前有一个步骤,我会在客户注册后触发语音广播。这是对callfire的一个nusoap呼叫。

那里的延迟相当高,并且我的亚秒级注册过程增加了约2秒。结果,我让人们多次点击注册按钮。

有没有办法告诉应用程序不要等待结果并继续前进?

可以通过将所有nusoap代码放在一个单独的文件中作弊,然后打开该文件的套接字,但我正在寻找一种更清洁的方式。

或者有没有办法解雇一个功能而不是等待结果?我认为没有。

4 个答案:

答案 0 :(得分:1)

您可以将代码移动到cli脚本。从Web服务器PHP线程运行cli脚本。 CLI进程然后分叉,父进程退出。 Web线程可以继续,CLI子进程可以注册用户。

如果SOAP调用失败,我建议您将数据存储在某处并将其删除或将其标记为已成功完成一次。您可以定期检查cron作业以查看是否有任何调用失败,然后重试它们然后通知某人(管理员,用户)。

答案 1 :(得分:0)

如果你有一些必须“很快”而不是“马上”的行动,那么将它添加到某种类型的队列(例如数据库表)。

接下来,每分钟都有一个cron作业,并执行此队列中的任务。

答案 2 :(得分:0)

据我所知,没有办法直接触发一个函数并在执行链中移过它...但是有一些很酷/简单的解决方案:

  • 正如你所提到的那样,将代码放在一个单独的文件中并以此方式触发...虽然我只是使用shell_exec命令来运行它并且nohup它所以它在后台运行
  • 按照Paul提到的那样创建一个队列
  • 看看像gearman这样的东西(http://www.danga.com/gearman/)...... Digg写了一些不错的PEAR库来处理它。 Gearman可能有点矫枉过正,但是太酷了,更不用提了:)。

答案 3 :(得分:0)

您可能会考虑从浏览器中执行一些Ajax请求:

  • 用户登录
  • 他被重定向到一个页面(例如他的帐户页面)
  • 在该页面上,对服务器上的PHP脚本进行Ajax调用,进行SOAP调用

这是一个你会经常听到的想法,我认为......但它需要用户启用Javascript,并且可能并不总是很好(如果用户在Ajax请求完成之前离开页面会怎样?)

恕我直言,最好的(更安全,总是可以工作,不依赖于客户端,......)的方式实际上是一些请求队列,如Paul suggested。 这就是我选择的解决方案。

但是,当然,它会在用户登录和发送请求的时间之间增加一些延迟......但这样做会不是很糟糕?