我正在尝试为我的应用程序创建邮件功能,用户可以向每个订阅者发送电子邮件。问题是这可能需要相当长的时间,具体取决于订阅者的数量。我想让用户将其写入消息并将其发送到服务器。然后,服务器将“委派”要在http请求之外执行的任务。这样,“交易”id可以被发送到客户端,客户端又可以周期性地“轮询”服务器以检查电子邮件交易的进度。我可以通过哪些方式(或A方式)实现这一目标?
答案 0 :(得分:2)
您正在描述一个消息队列('Message'和'Job'可以在此上下文中互换使用)。它的工作原理是将消息弹出到队列中,该队列包含有关要完成的作业的信息。工作人员不断检查队列中是否有新消息。一旦找到,工作人员将获取消息的所有权,将其从队列中删除,并执行其编程的任何操作。
我过去曾使用Gearman。他们有一些漂亮的good examples来演示消息队列的基础知识。
有两种类型的工作:前景和背景。
前台作业阻塞,因为您的PHP代码将在继续之前等待作业完成。这是为了将硬件密集型处理卸载到工作者(最有可能在与Webhead不同的服务器上运行)。
后台作业没有阻止。这些是发送到队列并假定稍后工作的作业。一个很好的例子是由一个查询生成的报告,该报告需要几分钟才能运行,并在准备好时通过电子邮件发送(或以其他方式发送)给用户。