zookeeper php注册发现,用 PHP 监听 ZooKeeper

代码出处:https://git.oschina.net/afrxprojs/xgame-code_server ZooKeeper ?php 首先, 执行 zkCli.sh 进入 ZooKeeper 命令行工具界面,// 在命令行中可以执行以下操作 : 新建 Kev/Value// $ create /xgame 0// $ create /xgame/S00 0// $ create /xg

代码出处:https://git.oschina.net/afrxprojs/xgame-code_server

ZooKeeper

//

// 首先, 执行 zkCli.sh 进入 ZooKeeper 命令行工具界面,

// 在命令行中可以执行以下操作 :

//

// 新建 Kev/Value

// $ create /xgame 0

// $ create /xgame/S00 0

// $ create /xgame/S00/conf/maintenanceTimeStr 0

// $ create /xgame/S00/conf/whiteList 0

// $ create /xgame/S00/conf/blackList 0

//

// 之后执行 PHP 命令启动监听服务 :

//

// $ php ZkServ.php

//

// 注意 : 请事先确认是否已经安装 php-zookeeper 扩展?

// 回到 ZooKeeper 界面, 尝试修改维护时间字符串 :

//

// $ set /xgame/S00/conf/maintenanceTimeStr [20150101000000,20151231235959]

//

// @import

require_once("MyLog.php");

require_once("etc/AppName.php");

require_once("etc/ServerName.php");

require_once("etc/ZooKeeper.php");

/**

* ZooKeeper 服务

*

* @auth jinhaijiang

* @since 2015/6/28

* @see https://git.oschina.net/afrxprojs/xgame-code_server

*

*/

class ZkServ extends Zookeeper {

/**

* 应用名称

*

* @var String

*

*/

public $_appName;

/**

* 服务器名称

*

* @var String

*

*/

public $_serverName;

/**

* ZooKeeper 路径字典

*

* @var Array

*

*/

private $_zkPathMap;

/**

* 启动服务

*

*/

public function startUp() {

// 获取应用名称和服务器名称

$appName = $this->_appName;

$serverName = $this->_serverName;

// 初始化路径字典

$this->_zkPathMap = array(

"/${appName}/${serverName}/conf/maintenanceTimeStr" => "updateMaintenanceTime",

"/${appName}/${serverName}/conf/whiteList" => "updateWhiteList",

"/${appName}/${serverName}/conf/blackList" => "updateBlackList",

);

foreach ($this->_zkPathMap as $key => $val) {

// 输出调试日志

MyLog::LOG()->debug("准备监听 : $key");

// 设置监听

$this->get($key, array($this, "watch"));

}

}

/**

* 监听数据变化

*

* @param $eventType

* @param $eventState

* @param $eventKey

*

*/

public function watch($eventType, $eventState, $eventKey) {

// 记录日志信息

MyLog::LOG()->info("接到数据");

// 输出调试信息

MyLog::LOG()->debug("eventType = ${eventType}, eventState = ${eventState}, eventKey = ${eventKey}");

// 获取数据

$data = $this->get($eventKey);

// 获取函数引用并调用

$funcRef = $this->_zkPathMap[$eventKey];

$this->$funcRef($data);

// 循环监听

$this->get($eventKey, array($this, "watch"));

}

/**

* 更新停服维护时间,

* 注意这是一个回调函数! 会在 watch 函数中被间接调用

*

* @param String $value

* @return void

*

*/

private function updateMaintenanceTime($value) {

// 记录日志信息

MyLog::LOG()->info("维护时间 = $value");

// 获取 JSON 数组

$jsonArr = json_decode($value);

$startTimeStr = $jsonArr[0];

$endTimeStr = $jsonArr[1];

$text = <<< __EOF

\$GLOBALS["MAINTENANCE_START_TIME"] = $startTimeStr;

\$GLOBALS["MAINTENANCE_END_TIME"] = $endTimeStr;

__EOF;

// 目标文件

$targetFile = dirname(__FILE__) . "/etc/MaintenanceTime.php";

// 写出目标文件

self::writeToFile($targetFile, $text);

}

/**

* 更新白名单

* 注意这是一个回调函数! 会在 watch 函数中被间接调用

*

* @param String $value

* @return void

*

*/

private function updateWhiteList($value) {

// 记录日志信息

MyLog::LOG()->info("白名单 = ${value}");

// 获取 JSON 数组

$jsonArr = json_decode($value);

$text = <<< __EOF

\$GLOBALS["WHITE_LIST"] = array(

__EOF;

foreach ($jsonArr as $json) {

// 获取平台 UUId

$platformUUId = $json;

// 添加到文本

$text .= "\n\t\"${platformUUId}\" => 1, ";

}

$text .= "\n);";

// 目标文件

$targetFile = dirname(__FILE__) . "/etc/WhiteList.php";

// 写出目标文件

self::writeToFile($targetFile, $text);

}

/**

* 更新黑名单

* 注意这是一个回调函数! 会在 watch 函数中被间接调用

*

* @param String $value

* @return void

*

*/

private function updateBlackList($value) {

// 记录日志信息

MyLog::LOG()->info("白名单 = ${value}");

// 获取 JSON 数组

$jsonArr = json_decode($value);

$text = <<< __EOF

\$GLOBALS["BLACK_LIST"] = array(

__EOF;

foreach ($jsonArr as $json) {

// 获取平台 UUId

$platformUUId = $json;

// 添加到文本

$text .= "\n\t\"${platformUUId}\" => 1, ";

}

$text .= "\n);";

// 目标文件

$targetFile = dirname(__FILE__) . "/etc/BlackList.php";

// 写出目标文件

self::writeToFile($targetFile, $text);

}

/**

* 写出目标文件

*

* @param $targetFile 目标文件的完整路径

* @param $text 文本内容

* @return void

*

*/

private static function writeToFile($targetFile, $text) {

// 打开文件

$fp = fopen($targetFile, "w");

if (!$fp) {

// 如果打开文件失败,

// 则直接退出!

MyLog::LOG()->error("打开文件 ${targetFile} 失败!!");

return;

}

// 写出文件内容

$result = fwrite($fp, $text);

if (!$result) {

// 如果写出文件失败,

// 则记录错误日志

MyLog::LOG()->error(

"写出文件 ${targetFile} 失败!!"

);

}

fflush($fp);

fclose($fp);

}

}

// 获取服务器名称

$appName = $GLOBALS["APP_NAME"];

$serverName = $GLOBALS["SERVER_NAME"];

// ZooKeeper 配置

$zkHost = $GLOBALS["ZK_SERVER_HOST"];

$zkPort = $GLOBALS["ZK_SERVER_PORT"];

// 创建服务对象

$servObj = new ZkServ("${zkHost}:${zkPort}");

$servObj->_appName = $appName;

$servObj->_serverName = $serverName;

// 启动服务

$servObj->startUp();

while (true) {

MyLog::LOG()->info("live");

sleep(60);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值