當(dāng)前的設(shè)計(jì)是這樣的:在workerman-chat的Event::onWorkerStart中設(shè)置一個(gè)定時(shí)器,定時(shí)去獲取各個(gè)訂單的運(yùn)單狀態(tài)(根據(jù)快遞公司的API來獲取)。如果運(yùn)單狀態(tài)有更新則直接當(dāng)作聊天記錄發(fā)送給用戶和商家(項(xiàng)目與gateway通信這個(gè)已經(jīng)修好,再次感謝walkor)。
gateway手冊(cè)上說“不要在onWorkerStart內(nèi)執(zhí)行長(zhǎng)時(shí)間阻塞或者耗時(shí)的操作”。
示例代碼如下:
public static function onWorkerStart(){
// 每1小時(shí)執(zhí)行一次
$time_interval = 3600;
Timer::add($time_interval, 'check_express', array(), false);
}
請(qǐng)問,check_express()是一比較耗時(shí)的操作,像上面的設(shè)計(jì)會(huì)有阻塞影響么?
我可不可以這樣理解,因?yàn)閛nWorkerStart只在啟動(dòng)時(shí)執(zhí)行一次。在onWorkerStart里設(shè)置定時(shí)器只是為了觸發(fā)定時(shí)啟動(dòng)而已,并且系統(tǒng)啟動(dòng)時(shí)還沒有達(dá)到執(zhí)行業(yè)務(wù)時(shí)間。那么只要在定時(shí)間隔內(nèi)(這里是一個(gè)小時(shí),我覺得這個(gè)任務(wù)應(yīng)該是幾秒內(nèi)就能完成)完成了check_express()里的業(yè)務(wù)就不會(huì)對(duì)整個(gè)聊天系統(tǒng)有影響?