您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
workerman常用组件-GlobalData变量共享组件
发布时间:2021-12-12 19:47:35编辑:雪饮阅读()
GlobalData变量共享组件
(要求Workerman版本>=3.3.0)
源码地址:https://github.com/walkor/GlobalData
注意
GlobalData需要Workerman版本>=3.3.0
安装
composer require workerman/globaldata
原理
利用PHP的__set __get __isset __unset魔术方法触发与GlobalData服务端通讯,实际变量存储在GlobalData服务端。例如当给客户端类设置一个不存在的属性时,会触发__set魔术方法,客户端类在__set方法中向GlobalData服务端发送请求,存入一个变量。
当访问客户端类一个不存在的变量时,会触发类的__get方法,客户端会向GlobalData服务端发起请求,读取这个值,从而完成进程间变量共享。
那么首先我们需要一个globalData用于存储变量的后端服务,其实现也很简单:
<?php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
// 监听端口
$worker = new GlobalData\Server('127.0.0.1', 2207);
Worker::runAll();
?>
然后咱们将这个globalData的后端服务给他运行起来:
[root@localhost workerman]# /usr/local/php734/bin/php -c /usr/local/php734/lib/php/php.ini server.php start -d
Workerman[server.php] start in DAEMON mode
-------------------------------------------- WORKERMAN ---------------------------------------------
Workerman version:4.0.22 PHP version:7.3.4
--------------------------------------------- WORKERS ----------------------------------------------
proto user worker listen processes status
tcp root globalDataServer frame://127.0.0.1:2207 1 [OK]
----------------------------------------------------------------------------------------------------
Input "php server.php stop" to stop. Start success.
那么我们的globalData客户端就可以用了,实例如:
<?php
require_once __DIR__ . '/vendor/autoload.php';
// 连接Global Data服务端
$global = new GlobalData\Client('127.0.0.1:2207');
// 触发$global->__isset('somedata')查询服务端是否存储了key为somedata的值
if(!isset($global->somedata)){
echo "没有存储somedata,我设置somedata\r\n";
// 触发$global->__set('somedata',array(1,2,3)),通知服务端存储somedata对应的值为array(1,2,3)
$global->somedata = array(1,2,3);
// 触发$global->__get('somedata'),从服务端查询somedata对应的值
echo "存储的somedata\r\n";
var_dump($global->somedata);
echo "删除掉已存储的somedata\r\n";
// 触发$global->__unset('somedata'),通知服务端删掉somedata及对应的值
unset($global->somedata);
var_dump($global->somedata);
}
?>
globalData客户端运行效果:
[root@localhost workerman]# /usr/local/php734/bin/php -c /usr/local/php734/lib/php/php.ini start.php
没有存储somedata,我设置somedata
存储的somedata
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
删除掉已存储的somedata
NULL
关键字词:workerman,GlobalData,常用,组件,变量,共享