0

購読者に毎週最大 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;

それは完全に機能しますが、一定量の ajax 呼び出しの後に $.load ajax 呼び出しがフリーズすることがあります。

別のアーキテクチャを使用する必要がありますか? これには $.post の方が適していますか? wordpress プラグインの一部として機能します。フリーズすると、ワードプレスが「ハートビート」の ajax 呼び出しを送信しようとしていることに気づきましたか?

ありがとうマティアス

4

1 に答える 1

0

他の人が提案したように、このサーバー側で実行できる実際のプログラム (java/c/etc) を構築し、実行の現在のステータスについてデータベース内のレコードを更新します。

その後、フロント エンド サイトはそのステータス レコードにアクセスし、それが機能していることをユーザーに確認できます。これは、他の人が述べているように、javascript で行うべきではなく、問題の原因です。Ajax を使用して 30 秒ごとに簡単にポーリングしてレコードをチェックし、ほぼリアルタイムでステータスを返すことができます。リアルタイムが必要な場合は、WebSocket を使用してステータスを Web クライアントにプッシュすることもできます。

于 2016-05-28T22:42:36.887 に答える