我正在尝试为我的应用程序创建一个邮件功能,用户可以在其中向每个订阅者发送电子邮件。问题是这可能需要相当长的时间,具体取决于订阅者的数量。我想把它放在用户编写消息并将其发送到服务器的地方。然后服务器将“委派”要在 http 请求之外执行的任务。这样,可以将“事务”ID 发送给客户端,客户端反过来可以定期“轮询”服务器以检查电子邮件事务的进度。我可以通过哪些方式(或一种方式)来实现这一目标?
问问题
133 次
1 回答
2
您正在描述一个消息队列(在这种情况下,“消息”和“工作”可以互换使用)。它的工作原理是将一条消息弹出到队列中,其中包含有关要完成的工作的信息。工作人员不断检查队列是否有新消息。一旦找到,worker 将获得消息的所有权,将其从队列中删除,并执行它被编程执行的任何操作。
我以前用过Gearman。他们有一些很好的例子来展示消息队列的基础知识。
有两种类型的工作:前台和后台。
前台工作
前台作业被阻塞,因为您的 PHP 代码将等待作业完成,然后再继续。这旨在将硬件密集型处理卸载到工作人员(很可能在与 webhead 不同的服务器上运行)。
后台作业
后台作业没有阻塞。这些是发送到队列并假定稍后工作的作业。一个很好的例子是由查询生成的报告,该查询需要几分钟才能运行并在准备好后通过电子邮件(或以其他方式发送)给用户。
于 2012-06-18T18:51:52.780 回答