用 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
<?php // // 首先, 执行 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 <?php \$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 <?php \$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 <?php \$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); }

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

Gate.io 官网可以通过单击链接或在浏览器中输入网址访问。建议将网址添加到书签或收藏夹以方便访问。如果遇到无法访问问题,尝试清除浏览器的缓存和 Cookie。注意防范网络钓鱼,Gate.io 官方网站不会主动索要个人信息。此外,Gate.io 提供移动应用程序,可通过应用商

字符串是由字符组成的序列,包括字母、数字和符号。本教程将学习如何使用不同的方法在PHP中计算给定字符串中元音的数量。英语中的元音是a、e、i、o、u,它们可以是大写或小写。 什么是元音? 元音是代表特定语音的字母字符。英语中共有五个元音,包括大写和小写: a, e, i, o, u 示例 1 输入:字符串 = "Tutorialspoint" 输出:6 解释 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。总共有 6 个元

BitMEX交易所提币要求:必须完成两步验证和身份验证。最低提币金额因币种而异。提币流程包括登录账户、输入提币地址、输入金额和确认交易。BitMEX提币的优点包括快速处理、低手续费、多种币种支持和严格的安全措施。然而,它也面临监管不足、黑客攻击风险、提币限制和账户冻结风险等缺点。

在TREZOR上进行交易连接TREZOR设备,安装TREZORBridge应用程序。打开TREZOR套件,选择交易类型(发送、接收或兑换)。输入交易详细信息(地址、金额、费用等)。检查详细信息,在TREZOR设备上按“确认”以授权交易。

2025 年排名前十的数字货币交易 App 依次为:币安、OKX、Gate.io、Bitget、火币、KuCoin、BitMart、Bybit、Bitfinex、Poloniex。这些交易所以其交易量、资产选择、杠杆交易、社交交易、合规性、易用性、低交易费用和资金安全等特点在市场中脱颖而出。
