<?php
use Workerman\Worker;
use Workerman\WebServer;
use Workerman\Autoloader;
use PHPSocketIO\SocketIO;
use Workerman\Lib\Timer;
// composer autoload
require_once __DIR__ . '/../../vendor/autoload.php';
$io = new SocketIO(2020);
class Data
{
    static $_instance = null;
    public static function instance(){
        if(self::$_instance == null)
            self::$_instance = new Data();
        return self::$_instance;
    }
    // ->{id1,id2,id3}
    public $match_quque = array();
    // ->$socket
    public $uid_mapping = array();
}
// 500ms检测一次匹配队列
Timer::add(0.5,function(){
    var_dump(Data::instance()->match_quque);
        print("my pid == ".getmypid());
});
$io->on('connection', function($socket)use($io){
    $socket->on('match', function ($data)use($socket){
        Data::instance()->match_quque[] = 1;
        print("my pid == ".getmypid());
        var_dump(Data::instance()->match_quque);
    });
});
if (!defined('GLOBAL_START')) {
    Worker::runAll();
}
// 打印出来的PID是不一样的 导致我无法在 on的回调中和定时器中共享同一份数据
根据手册,定时器要在onXXX函数里设置,在onXXXX外部设置属于主进程的定时器,所以属于不同进程。
你可以在
$io->on('workerStart', function(){});
里设置定时器
谢谢你
不客气