J'ai écrit un démon pour aller chercher des trucs dans mysql et faire des requêtes curl basées sur les infos de mysql. depuis que je parle couramment php, j'ai écrit ce démon en php en utilisant System_Daemon de pear. Cela fonctionne très bien, mais je suis curieux de connaître la meilleure approche pour me connecter à mysql. se sent bizarre de créer une nouvelle connexion mysql toutes les deux secondes, devrais-je essayer une connexion persistante? toute autre entrée? Il est essentiel de limiter au maximum les pertes de mémoire potentielles ...connexion mysql à partir d'un démon écrit en php
nettoyé le script ci-dessous. supprimé les trucs de MySQL pour l'instant, en utilisant un faux tableau pour garder ce non biaisé:
#!/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;
}
+1, cela fonctionne. En règle générale, lorsque j'écris quelque chose comme, il ouvre une connexion régulière au démarrage, et l'utilise pour la durée. Si une requête échoue, essayez de vous reconnecter plusieurs fois, et si cela ne fonctionne pas, échouez gracieusement. – timdev