2012-03-17 12 views
0

私はPHPのnoobですので、何か助けが必要です。私は、プッシュメッセージをiPhoneに送信するプッシュサービスを構築しました。このコメントでは、複数のメッセージを1つのパケットにまとめるほうが効率的だと述べています。また、今、私はそれぞれのメッセージをすべて削除するよう呼びかけています。複数のメッセージを1つのパッケージにまとめるにはどうすればよいですか?このアルゴリズムをより効率的にする

おかげ

function start() 
{ 
    writeToLog('Connecting to ' . $this->server); 

    if (!$this->connectToAPNS()) 
     exit; 


    while (true) 
    { 
     // Do at most 20 messages at a time. Note: we send each message in 
     // a separate packet to APNS. It would be more efficient if we 
     // combined several messages into one packet, but this script isn't 
     // smart enough to do that. ;-) 

     $stmt = $this->pdo->prepare('SELECT * FROM push_queue WHERE time_sent IS NULL LIMIT 20'); 
     $stmt->execute(); 
     $messages = $stmt->fetchAll(PDO::FETCH_OBJ); 

     foreach ($messages as $message) 
     { 
      if ($this->sendNotification($message->message_id, $message->device_token, $message->payload)) 
      { 
       //$stmt = $this->pdo->prepare('UPDATE push_queue SET time_sent = NOW() WHERE message_id = ?'); 
       //$stmt->execute(array($message->message_id)); 

       $stmt = $this->pdo->prepare('DELETE FROM push_queue WHERE message_id = ?'); 
       $stmt->execute(array($message->message_id)); 

      } 
      else // failed to deliver 
      { 
       $this->reconnectToAPNS(); 
      } 
     } 

     unset($messages);   
     sleep(5); 
    } 
} 
+2

あなたの質問を使用してこのようなメッセージを削除することができた後、アレイ

$deletedIds = array() foreach ($messages as $message) { if ($this->sendNotification()) { $deletedIds[] = $message->message_id; } } 

内のメッセージIDを削除することができますとは何の関係もありませんSQLを最適化することは、SQLの結果で何が行われたかについてです。その部分を説明する必要があります使用可能な回答を得るためにはるかに詳細に! – Yahia

答えて

4

あなたがグループは、クエリメソッドに

$this->pdo->query('DELETE FROM push_queue WHERE message_id IN ('.implode(',', $deletedIds).')'); 
+0

ありがとうございます。よく働く。送信されているメッセージクエリと同様のことが可能ですか? – BlackMouse

関連する問題