MySQL соединение с демоном, написанным на php - PullRequest
1 голос
/ 31 октября 2010

Я написал демон для извлечения некоторых вещей из mysql и выполнения некоторых запросов curl на основе информации из mysql. Так как я свободно владею php, я написал этого демона на php, используя System_Daemon от pear.

это работает нормально, но мне любопытно, как лучше всего подключиться к mysql. Мне кажется странным создавать новое соединение MySQL каждые пару секунд, я должен попробовать постоянное соединение? любой другой вход? сводить к минимуму потенциальные утечки памяти ...

убрал скрипт, прикрепленный ниже. сейчас удалил материал mysql, используя фиктивный массив, чтобы сохранить беспристрастность:

#!/usr/bin/php -q
<?php
require_once "System/Daemon.php";

System_Daemon::setOption("appName", "smsq");
System_Daemon::start();

$runningOkay = true;

while(!System_Daemon::isDying() && $runningOkay){

    $runningOkay = true;
    if (!$runningOkay) {
        System_Daemon::err('smsq() produced an error, '.
            'so this will be my last run');
    }

    $messages = get_outgoing();
    $messages = call_api($messages);
    #print_r($messages);

    System_Daemon::iterate(2);
}

System_Daemon::stop();  

function get_outgoing(){ # get 10 rows from a mysql table
    # dummycode, this should come from mysql
    for($i=0;$i<5;$i++){
        $message->msisdn = '070910507'.$i;
        $message->text = 'nr'.$i;
        $messages[] = $message;
        unset($message);
    }
    return $messages;
}

function call_api($messages=array()){
    if(count($messages)<=0){
        return false;
    }else{
        foreach($messages as $message){
            $message->curlhandle = curl_init();
            curl_setopt($message->curlhandle,CURLOPT_URL,'http://yadayada.com/date.php?text='.$message->text);
            curl_setopt($message->curlhandle,CURLOPT_HEADER,0);
            curl_setopt($message->curlhandle,CURLOPT_RETURNTRANSFER,1);
        }
        $mh = curl_multi_init();
        foreach($messages as $message){
            curl_multi_add_handle($mh,$message->curlhandle);
        }
        $running = null;
        do{
            curl_multi_exec($mh,$running);
         }while($running > 0);
        foreach($messages as $message){
            $message->api_response = curl_multi_getcontent($message->curlhandle);
            curl_multi_remove_handle($mh,$message->curlhandle);
            unset($message->curlhandle);
        }
        curl_multi_close($mh);
    }
    return $messages;
} 

Ответы [ 2 ]

1 голос
/ 31 октября 2010

Технически, если это демон, он работает в фоновом режиме и не останавливается, пока вы не попросите об этом.В этом случае нет необходимости использовать постоянное соединение, и даже вам, вероятно, не следует.Я ожидаю, что соединение закроется, когда я убью демона.

По сути, вы должны открыть соединение при запуске и закрыть его при завершении работы, и это все.Тем не менее, вы должны поместить туда сообщение об ошибке, если соединение неожиданно обрывается во время работы демона, поэтому оно либо корректно завершает работу (регистрируя сбрасывание соединения где-либо), либо повторяет попытку повторного подключения позже.

0 голосов
/ 31 октября 2010

может быть, до оператора while просто добавьте mysql_pconnect, но сейчас я ничего не имею о php-демонах ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...