0

我有一个 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 尝试发送“心跳”ajax 调用?

谢谢马蒂亚斯

4

1 回答 1

0

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

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

于 2016-05-28T22:42:36.887 回答