PHPSOCKETIO中定时器和on函数的回调不在同一进程如何优雅地处理?

0
<?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的回调中和定时器中共享同一份数据

已邀请:

walkor

赞同来自:

根据手册,定时器要在onXXX函数里设置,在onXXXX外部设置属于主进程的定时器,所以属于不同进程。


你可以在
$io->on('workerStart', function(){});
里设置定时器

Nathan

赞同来自:

谢谢你

walkor

赞同来自:

不客气

要回复问题请先登录注册