當(dāng)我第一個(gè)timer堵住了,其它timer則會(huì)被影響,這個(gè)時(shí)候我要怎么去弄才能讓這些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();
});
按照官方的手冊(cè),這樣寫三個(gè)試試。
手冊(cè)說的
定時(shí)器使用注意事項(xiàng)
1、只能在onXXXX回調(diào)中添加定時(shí)器。全局的定時(shí)器推薦在onWorkerStart回調(diào)中設(shè)置,針對(duì)某個(gè)連接的定時(shí)器推薦在onConnect中設(shè)置。
2、添加的定時(shí)任務(wù)在當(dāng)前進(jìn)程執(zhí)行(不會(huì)啟動(dòng)新的進(jìn)程或者線程),如果任務(wù)很重(特別是涉及到網(wǎng)絡(luò)IO的任務(wù)),可能會(huì)導(dǎo)致該進(jìn)程阻塞,暫時(shí)無法處理其它業(yè)務(wù)。所以最好將耗時(shí)的任務(wù)放到單獨(dú)的進(jìn)程運(yùn)行,例如建立一個(gè)/多個(gè)Worker進(jìn)程運(yùn)行
3、當(dāng)前進(jìn)程忙于其它業(yè)務(wù)時(shí)或者當(dāng)一個(gè)任務(wù)沒有在預(yù)期的時(shí)間運(yùn)行完,這時(shí)又到了下一個(gè)運(yùn)行周期,則會(huì)等待當(dāng)前任務(wù)完成才會(huì)運(yùn)行,這會(huì)導(dǎo)致定時(shí)器沒有按照預(yù)期時(shí)間間隔運(yùn)行。也就是說當(dāng)前進(jìn)程的業(yè)務(wù)都是串行執(zhí)行的,如果是多進(jìn)程則進(jìn)程間的任務(wù)運(yùn)行是并行的。
一個(gè)進(jìn)程里的定時(shí)器如果運(yùn)行超時(shí)會(huì)延遲這個(gè)進(jìn)程的其它定時(shí)器運(yùn)行的,我覺得你可以把不通的定時(shí)器放在不通的進(jìn)程去運(yùn)行就好了