<?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(){});
里设置定时器
谢谢你
不客气