延时操作个人目前接触最多的场景是用户下单后一定时间未支付自动取消订单,传统的做法是采用定时任务定时扫描数据库超时订单或者利用客户端的请求每次请求去检测一次是否有超时订单,这些方法我始终感觉不是很好,所以一直想办法在弄一个比较理想的方法,至少比上面这两个方法好一点的处理方式
今天没事就研究了一下这个东西,主要是利用workerman的定时器。所以首先得下载workerman然后引入到自己的项目,或者composer安装也可以,具体就不再多说了。先贴出代码
use Workerman\Worker;
use \Workerman\Lib\Timer;
require_once './Workerman/Autoloader.php';
//创建一个Worker监听2345端口,使用http协议通讯
$http_worker = new Worker("
//启动4个进程对外提供服务
$http_worker->count = 4;
//检查订单是否超时
function check_order($order){
//这个方法用于检查该订单是否超时。。。。具体逻辑根据实际应用场景写,这里只记录是否进入这个方法
file_put_contents('./log.txt','订单编号:'.$order.' 处理时间:'.date('Y-m-d H:i:s')."\n",FILE_APPEND);
}
$http_worker->onMessage = function($connection, $data)
{
$msg=&