$serv = new Swoole\Websocket\Server("127.0.0.1", 9502); $serv->on('Open', function($server, $req) { echo "connection open: ".$req->fd . "\n"; }); $serv->on('Message', function($server, $req) { if ($req->data == 'allcoin') { # 将客户端id加入到广播队列中 Db_Redis::hset(SwooleController::QU_ALLCOIN, $req->fd, 0); # 首次请求先返回一次数据 if ($allcoin = Db_Redis::hget('market', 'allcoin')) { $server->push($req->fd, SwooleController::parseData('allcoin', $allcoin)); } } else if ($req->data == 'trends') { # 立即返回数据 if ($trends = Db_Redis::hget('market', 'trends')) { $server->push($req->fd, SwooleController::parseData('trends', $trends)); } } }); $serv->on('Close', function($server, $fd) { # 连接断开时将客户端id从队列中删除 Db_Redis::hdel(SwooleController::QU_ALLCOIN, $fd); }); $serv->on('WorkerStart', function ($server, $workerId) { echo "worker started: {$workerId}\n"; if ($workerId == 0) { # 定时推送数据 $server->tick(1000, function() use ($server) { if (!$allcoin = Db_Redis::hget('market', 'allcoin')) return; foreach ((array)Db_Redis::hkeys(SwooleController::QU_ALLCOIN) as $fd) { # 防止意外情况,对队列中的客户端id检查是否存活 if (!$server->exist($fd)) { Db_Redis::hdel(SwooleController::QU_ALLCOIN, $fd); continue; } # 推数据数据 todo 优化,当数据没有更新时,不需要反复推送。 $server->push($fd, SwooleController::parseData('allcoin', $allcoin)); } }); } }); $serv->start();
swoole定时器
猜你喜欢
转载自blog.csdn.net/qq_40393605/article/details/80346018
今日推荐
周排行