【问题标题】:How to read multiple message status with imap faster如何使用 imap 更快地读取多个消息状态
【发布时间】:2014-07-14 18:53:06
【问题描述】:

我需要阅读消息状态,例如:未读数量,已读每个帐户。每个帐户都是循环从mysql获取登录数据的。当登录成功时,发送已读和未读的数量。问题是从 mysql 处理所有帐户 (17) 大约需要 2 分钟。如何让它更快。理想的时间在 10-30 秒之间。有可能吗?

这是我的代码:

$sql_sImap=mysqli_query($con,"select * from LOGIN_DB order by imap_user asc");
while($rec_sImap=mysqli_fetch_array($sql_sImap)){

    $inbox=imap_open("{mail.xxx:143/novalidate-cert}INBOX", "$rec_sImap[imap_user]" , "$rec_sImap[imap_pw]");
    $num=imap_status($inbox,"{mail.xxx:143/novalidate-cert}INBOX", SA_ALL);
    $total=$num->messages;
    $unread=$num->unseen;
    $read=$total-$unread;


    echo "
    <tr>
        <td><a href=\"main.php?do=mail&action=view&sid=$rec_sImap[imap_sid]\">$rec_sImap[imap_user]</a></td>
        <td>".number_format($unread)."</td>
        <td>".number_format($read)."</td>
        <td>".number_format($total)."</td>
        <td><a href=\"main.php?do=mail&action=del_user&sid=$rec_sImap[imap_sid]\">del</a></td>
    </tr>
    ";
    $unread="";
    $read="";
    $total="";
}

正如我上面提到的。这些代码行花了我将近 2 分钟的时间来处理。我怎样才能让它更快?

问候,

【问题讨论】:

  • 做一些时间来解决瓶颈。我不认为这是 MySQL。我敢肯定,大部分时间都花在等待 IMAP 答案上。
  • 谢谢VMai有什么解决办法吗?
  • 我建议在三个部分中重写您的代码:1)将您的数据库中的完整数据读取到一个数组(行)中,2)将 IMAP 数据从这些数组中获取到第二个数组中, 3) 编写您的 HTML 输出。因此,您可以轻松衡量在这些部分花费的时间。
  • 让我说清楚。 $login_array=array("用户 A"=>"pw_A","用户 B"=>"pw_B"); $imap_array=array("msg_1"=>array("subj"=>"xxx","detail"=>"xxx"));然后呢?

标签: php mysql imap status


【解决方案1】:

您的代码对系列中的每个 IMAP 服务器执行同步连接;这意味着您必须等待建立每个连接,包括 TLS 会话握手。这是一件很昂贵的事情。您最好的希望是切换到一些支持异步连接的 IMAP 库,这样您就可以一次打开多个 TCP 套接字,并行执行 SSL/TLS 会话握手,并同时在多个套接字上运行必要的 IMAP 聊天。我不认为 PHP 的股票 IMAP 扩展可以做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 2021-09-10
    • 1970-01-01
    • 2020-01-23
    • 2014-02-13
    • 2015-12-20
    • 2011-04-04
    相关资源
    最近更新 更多