定时器问题

0
$io->on('connection', function($socket)use($io){
        echo "new connection coming\n";
        $time_interval = 3;
        $n = 0;
        Timer::add($time_interval, function() {
            global $io,$n;
            $io->emit('sendLatest', $n++);
        });
});
\Workerman\Worker::runAll();

两个问题,麻烦各位帮忙解答一下:
1.当页面打开第一个页面时$n是从0开始返回的,但是打开第二个页面时$n是从第一个页面的数字开始返回,怎么才能每个请求使用一个$n呢?
2.当打开多个页面时,返回的时间间隔明显小于3秒了,打开越多,间隔越小,有时候一下子返回好几个

已邀请:

静默

赞同来自: zwc2004

$io->on('connection', function($socket){
        //all_sockets保存所有的socket
        global $all_sockets;
        //给每个socket添加个属性n记录自增值
        $socket->n = 0;
       $all_sockets = $socket;
});
$io->on('disconnect', function($socket){
       //连接关闭时把socket从all_sockets里删除
        global $all_sockets;
       unset($all_sockets);
});$io->on('workerStart', function() {
    Timer::add(3, function(){
        global $all_sockets;
        foreach ($all_sockets as $socket) {
                $socket->emit('sendLatest', $socket->n++);
        }
    });
});

感觉你的业务逻辑应该是这样的,大概意思是这样,有报错自己解决下

静默

赞同来自:

这样有问题吧,有1万个连接连上来,创建1万个定时器,那服务器不挂才怪啊。
创建一个定时器大家一起用比较合理

静默

赞同来自:

$io->on('workerStart', function(){
    // ...
});

要回复问题请先登录注册