<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
use Workerman\Lib\Timer;
use PHPSocketIO\SocketIO;
$io = new SocketIO(81);
// 當(dāng)有客戶端連接時(shí)
$io->on('connection', function($socket)use($io){
// 獲取鏈行股價(jià)行情事件回調(diào)函數(shù)
$socket->on('get_price', function($msg)use($io){
// 一個(gè)定時(shí)器,每x秒執(zhí)行一次
$time_interval = 7;
Timer::add($time_interval, function(){
global $io,$socket;
//鏈接redis
$redis_host = "127.0.0.1";
$redis_port = 6379;
$redis = new Redis();//使用phpredis(比predis性能好)
$res = $redis->connect($redis_host, $redis_port);
if($res){
$rs = $redis->get("lhang_ticker");
$data = json_decode($rs,true);
}
$io->emit('send_prices', $data);
});
});
});
Worker::runAll();
這樣寫,好像每個(gè)用戶鏈接后發(fā)送get_price都會(huì)新增了一個(gè)定時(shí)器(不確定是不是,自己測試的時(shí)候打開多個(gè)頁面,客戶端接收的數(shù)據(jù)有時(shí)候一下子返回多個(gè))。。有什么辦法可以讓所有用戶只共用一個(gè)定時(shí)器嗎?