群发邮件:带有ajax调用的循环随机冻结

时间:2016-05-26 12:50:31

标签: jquery ajax wordpress wordpress-plugin massmail

我有一个wordpress插件,每周向我们的订阅者发送多达3,200条简报。然而,它有时会在800之后冻结,有时在1,200封邮件之后(它总是不同,没有某种模式)。我们使用turbo smtp作为我们的主机。

以下是我的表现方式:

我循环遍历所有邮件地址的表行,并为每一行触发ajax调用。

// *** massmailer.php ****

// get total count of subscribers
$sqlAll = "SELECT * FROM subscribers";
$resultAll = mysql_query($sqlAll);
$numrowsAll = mysql_num_rows($resultAll);

// send mail for each subscriber, increasing row pointer $i each time
$sql = "SELECT * FROM subscribers LIMIT $i, 1";
$result = mysql_query($sql);
while ($guy = mysql_fetch_array($result)):
    $mail = new PHPMailer(); 
    $mail->Host = 'pro.turbo-smtp.com';
    .... (other smtp settings here)
    $mail->Send();

    $i ++; // increase the row pointer by 1

    // if row is NOT the last in the table, repeat this step for the next row   
    if ($i < $numrowsAll) {
echo "<script>$('#placeholder_massmailer').append($('<div>').load('massmailer.php?i=<? echo $i ?>'))</script>";    
}
endwhile;

它工作得很好,但有时,$ .load ajax调用接缝在一定量的ajax调用后冻结。

我应该使用其他架构吗? $ .post更好吗?它作为wordpress插件的一部分;当它已经冻结时,我注意到wordpress试图发送一个&#34;心跳&#34; ajax电话?

感谢Matthias

1 个答案:

答案 0 :(得分:0)

正如其他人建议构建一个真实的程序(java / c / etc),可以执行此服务器端并更新数据库中的记录以获取当前运行状态。

然后您的前端站点可以访问该状态记录并向用户验证它是否正常运行。这应该像其他人所说的那样不是在javascript中完成的,而且是你问题的根源。您可以轻松地每隔30秒使用Ajax轮询一次以检查记录并近乎实时地返回状态。如果需要实时,也可以使用WebSocket将状态推回到Web客户端。