我有一个脚本,目前有一个步骤,在客户注册后触发语音广播。这是对 callfire 的 nusoap 调用。
那里的延迟相当高,并且在我的亚秒级注册过程中增加了大约 2 秒。结果,我让人们不止一次地点击注册按钮。
有没有办法告诉应用程序不要等待结果而继续前进?
通过将所有 nusoap 代码放在一个单独的文件中,然后打开该文件的套接字来作弊是可能的,但我正在寻找一种更清洁的方法。
或者有没有办法触发一个函数而不等待结果?我不认为有。
您可以将代码移动到 cli 脚本。从 Web 服务器 PHP 线程运行 cli 脚本。然后 CLI 进程分叉,父进程退出。Web 线程可以继续,CLI 子进程可以注册用户。
如果 SOAP 调用失败,我建议您将数据存储在某处并将其删除或将其标记为完成一次成功。您可以让 cron 作业定期检查是否有任何调用失败,然后重试它们然后通知某人(管理员、用户)。
如果你有一些动作必须“很快”而不是“马上”,那么将它添加到某种队列中(例如数据库表)。
接下来,每分钟左右都有一个 cron 作业来执行此队列中的任务。
据我所知,没有办法直接触发一个函数并在执行链中移过它......但是有一些很酷/简单的解决方案:
您可能会考虑从浏览器执行一些 Ajax 请求:
这是你经常听到的一个想法,我认为......但它要求用户启用 Javascript,并且可能并不总是很好(如果用户在 Ajax 请求完成之前离开页面怎么办?)
恕我直言,最好的(更安全,将始终有效,不依赖于客户端,...)方式确实是使用一些请求队列,就像Paul 建议的那样。
这就是我会选择的解决方案。
但是,当然,它会在用户登录和发送请求之间增加一些延迟......但有那么糟糕吗?