如何将大量任务划分为小任务并在特定时间间隔内执行,在php

问题描述:

我需要将大量的任务发送给大量成员(例如5000个成员)。如何将大量任务划分为小任务并在特定时间间隔内执行,在php

我需要发送这个使用SMTP服务器。

我会从数据库中获得这5000个成员的邮件ID。

新成员将添加到数据基本表中的每个小时,

例如

在1小时后,部件的数量将达到6000

所以这是最好的方法,以通过分任务发送邮件给所有这些成员

您需要一个消息代理。 http://www.rabbitmq.com/http://www.zeromq.org/会帮助你。

+0

任何特殊的原因选择?添加两者的简短摘要将改善您的答案。请注意,仅链接的答案通常会被忽视。 – 2013-02-21 17:48:53

+0

你是对的,但我只是希望他有消息经纪人的通知。我不是消息代理教程。 – 2013-02-21 18:46:14

您可以创建一种方法来跟踪已发送邮件的成员(例如,数据库表上的布尔值),创建一个向X人发送邮件的脚本,并配置一个cron以每Y次执行一次该脚本。

如果成员数量的增加没有减慢并且与您的示例相匹配,您需要配置脚本和cron以在一小时内输出超过1000条消息(例如,如果脚本发送100条消息,它应该运行更多每小时10次以上,每5分钟约1次)。

如果成员数量的增加会逐渐减慢,那么您需要确保所有成员都收到邮件的时间窗口有多大。

或者,使用Ogun建议的消息代理。

+0

感谢您的详细回复。 让我知道'壳'在这方面有任何相关性 – Linto 2013-02-21 19:29:58

如何通过curl异步运行它。 这样,虽然循环6000个成员,但由于长时间执行,您的文件不会得到超时响应。

function send($params) { 
    foreach($params as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } 
    rtrim($fields_string,'&'); 

    $ch = curl_init(); 
    curl_setopt($ch,CURLOPT_URL,'http://localhost/anotherfiletosendemail.php'); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 1); 
    curl_setopt($ch,CURLOPT_POST,count($params)); 
    curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string); 
    curl_exec($ch); 
    curl_close($ch); 
}