اتصال MySQL من Daemon مكتوب في PHP
-
27-09-2019 - |
سؤال
لقد كتبت خفيًا لجلب بعض الأشياء من MySQL وأقدم بعض طلبات الضفيرة بناءً على المعلومات من 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;
}
المحلول
من الناحية الفنية إذا كان خفيًا ، فإنه يعمل في الخلفية ولا يتوقف حتى تطلب منه. ليست هناك حاجة لاستخدام اتصال مستمر في هذه الحالة ، وحتى ، ربما لا ينبغي عليك ذلك. كنت أتوقع إغلاق الاتصال عندما أقتل الخفي.
في الأساس ، يجب عليك فتح اتصال عند بدء التشغيل ، وإغلاقه عند الإغلاق ، وهذا يتعلق به. ومع ذلك ، يجب أن تضع بعض الخطأ هناك في حالة انخفاض الاتصال بشكل غير متوقع أثناء تشغيل الخفي ، لذلك إما أنه يغلق بأمان (عن طريق تسجيل انخفاض اتصال في مكان ما) أو جعل إعادة الاتصال لاحقًا.
نصائح أخرى
ربما من قبل أثناء العبارة ، فقط أضف mySQL_PCONNECT ، لكنني لا أفعل الآن أي شيء عن PHP Daemons ...