當(dāng)我第一個timer堵住了,其它timer則會被影響,這個時候我要怎么去弄才能讓這些timer互不影響呢,新人剛接觸,求大佬救命!代碼如下:
$worker = new Worker();
$worker->count = 1;
$worker->onWorkerStart = function($worker)
{
$time_id = Timer::add(1, function() use (&$time_id){
$date = date('Y-m-d H:i:s',time());
$html = file_get_contents('https://github.com');
echo "-$time_id --- $date\n";
});
$time_id1 = Timer::add(2, function()use (&$time_id1){
$date = date('Y-m-d H:i:s',time());
echo "-$time_id1 ---- $date\n";
});
$time_id2 = Timer::add(3, function()use (&$time_id2){
$date = date('Y-m-d H:i:s',time());
echo "-$time_id2 ---- $date\n";
});
};
// 運(yùn)行worker
Worker::runAll();
$closeInterval = 10;
$closeTime = time();
$con -> conClose = Timer ::add($closeInterval,function() use ($con,$closeTime){
$con -> close();
});
按照官方的手冊,這樣寫三個試試。
手冊說的
定時器使用注意事項(xiàng)
1、只能在onXXXX回調(diào)中添加定時器。全局的定時器推薦在onWorkerStart回調(diào)中設(shè)置,針對某個連接的定時器推薦在onConnect中設(shè)置。
2、添加的定時任務(wù)在當(dāng)前進(jìn)程執(zhí)行(不會啟動新的進(jìn)程或者線程),如果任務(wù)很重(特別是涉及到網(wǎng)絡(luò)IO的任務(wù)),可能會導(dǎo)致該進(jìn)程阻塞,暫時無法處理其它業(yè)務(wù)。所以最好將耗時的任務(wù)放到單獨(dú)的進(jìn)程運(yùn)行,例如建立一個/多個Worker進(jìn)程運(yùn)行
3、當(dāng)前進(jìn)程忙于其它業(yè)務(wù)時或者當(dāng)一個任務(wù)沒有在預(yù)期的時間運(yùn)行完,這時又到了下一個運(yùn)行周期,則會等待當(dāng)前任務(wù)完成才會運(yùn)行,這會導(dǎo)致定時器沒有按照預(yù)期時間間隔運(yùn)行。也就是說當(dāng)前進(jìn)程的業(yè)務(wù)都是串行執(zhí)行的,如果是多進(jìn)程則進(jìn)程間的任務(wù)運(yùn)行是并行的。
一個進(jìn)程里的定時器如果運(yùn)行超時會延遲這個進(jìn)程的其它定時器運(yùn)行的,我覺得你可以把不通的定時器放在不通的進(jìn)程去運(yùn)行就好了