swoole提供了類似JavaScript的setInterval/setTimeout異步高精度定時(shí)器,粒度為毫秒級(jí)。使用也非常簡(jiǎn)單。
swoole中提供了一個(gè)定期器的用法? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (推薦學(xué)習(xí): swoole視頻教程)
$server->tick(1000,?function()?use?($server,?$fd)?{???????? ????$server->send($fd,?"hello?world"); ????});
開(kāi)始的時(shí)候我是這么用的,看下代碼
<?php $serv = new SwooleServer("0.0.0.0", 9501); $serv->set(array( ????'worker_num'?=>?1,????//worker?process?num )); $serv->on('connect',?function?($serv,?$fd){ ????echo?"客戶端?".$fd."連接成功?n"; }); $serv->on('receive',?function?($serv,?$fd,?$reactor_id,?$data)?{ ????echo?"客戶端?".$fd."發(fā)來(lái)消息:".$data."n"; ????$serv->send($fd,?'Swoole已經(jīng)介紹到您發(fā)送的消息:?'.$data); }); $serv->on('close',?function?($serv,?$fd)?{ ????echo?"客戶端?{$fd}關(guān)閉連接n"; }); $serv->on('WorkerStart',?function?($serv,?$worker_id){ ????$serv->tick(2000,?function(){ ????????echo?"執(zhí)行定時(shí)器任務(wù)?".time()."?n"; ????}); }); $serv->start();
開(kāi)始使用定時(shí)器的時(shí)候我放到了 onWorkStart 中執(zhí)行,這樣做的話可以保證在單個(gè)worker進(jìn)程的情況下定時(shí)器可以正常運(yùn)行,但是對(duì)于swoole來(lái)說(shuō)讓它單進(jìn)程工作顯然辱沒(méi)了它的 “才華” ,于是我將 work_num 設(shè)置為2,然后意外就發(fā)生啦,如圖
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載。
THE END