swoole提供了類似JavaScript的setInterval/setTimeout異步高精度定時器,粒度為毫秒級。使用也非常簡單。
swoole中提供了一個定期器的用法? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (推薦學(xué)習(xí): swoole視頻教程)
$server->tick(1000,?function()?use?($server,?$fd)?{???????? ????$server->send($fd,?"hello?world"); ????});
開始的時候我是這么用的,看下代碼
<?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ā)來消息:".$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í)行定時器任務(wù)?".time()."?n"; ????}); }); $serv->start();
開始使用定時器的時候我放到了 onWorkStart 中執(zhí)行,這樣做的話可以保證在單個worker進程的情況下定時器可以正常運行,但是對于swoole來說讓它單進程工作顯然辱沒了它的 “才華” ,于是我將 work_num 設(shè)置為2,然后意外就發(fā)生啦,如圖
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載。
THE END