我正在使用 PHP 制作支付系统,这取决于REST API。
我的业务逻辑:
如果有人通过我的系统提交请求,请说“将资金从A点转移到B点”,该事务将保存在我的数据库中,状态为:“submited”,然后提交给(移动网络运营商)API URL。处理它并将状态返回给我的系统,将我的数据库事务状态更新为新状态'例如:等待确认'并通知用户传入状态。
问题是:
我的应用程序应该以10秒的间隔继续请求检查新状态并向用户显示新状态,直到最后状态为“完成或拒绝”,因为状态可以为5,例如:“等待,拒绝,批准,完成......'。
我已经设法使用AJAX执行此操作,在JavaScript中设置时间间隔。但是如果用户关闭浏览器或者结束时发生了任何事情,它就会停止请求。导致我的应用程序不知道钱是否已交付。
我想如何使用 Gearman 在后台运行此循环任务而不涉及JavaScript时间间隔谢谢
答案 0 :(得分:2)
Gearman更像是一个工作队列,而不是一个调度系统。我可能会设置某种类型的cron作业,它将查询数据库并以异步方式将相应的作业提交给Gearman。使用gearman,您将需要使用libdrizzle或其他东西来执行持久队列,还需要使用某种类型的GearmanWorker流程管理器来一次运行多个作业。目前有许多项目都在不同程度上取得了成功,例如https://github.com/brianlmoon/GearmanManager。我评估的所有工人经理都没有真正达到标准,所以我创建了自己的工作经理很快就会开源。
答案 1 :(得分:0)
您不会在后台使用Gearman
进行循环任务,通常称为投票。 Gearman
通常用作工作队列,用于执行视频压缩,调整图片大小,发送电子邮件或其他您希望“背景”的任务。
我建议不要在前端或后端轮询数据库。轮询通常被认为是不好的,因为它不会扩展。在您的javascript示例中,您可以看到随着应用程序的增长并被成千上万的用户使用,轮询将在您的服务器上引入大量不必要的流量和负载。在后端,进行轮询的机器是单点故障。
您要探索的架构是 message queue 。它与编程中的Listener / Observer模式类似,但在系统级应用。这将允许一个更强大的系统,可以处理中断,从用户关闭浏览器一直到后端系统进行维护。