Maison php教程 php手册 用 PHP 监听 ZooKeeper

用 PHP 监听 ZooKeeper

Jun 06, 2016 pm 07:38 PM
g https 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);
}
Copier après la connexion
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

GATE OFFICIEL ENTRANCE ENTRANCE ÉCHANGE GATE OFFICIEL ENTRANCE ENTRANCE ÉCHANGE Feb 19, 2025 pm 03:03 PM

Le site officiel de Gate.io est accessible en cliquant sur le lien ou en entrant l'URL dans le navigateur. Il est recommandé d'ajouter l'URL à un signet ou un favori pour un accès facile. Si vous rencontrez des problèmes inaccessibles, essayez de nettoyer le cache et les cookies du navigateur. Veillez à empêcher le phishing, le site officiel de Gate.io ne prendra pas l'initiative de demander des informations personnelles. De plus, Gate.io fournit des applications mobiles qui peuvent être trouvées via le fournisseur d'applications

Règles et avantages de retrait de l'échange Bitmex et inconvénients Règles et avantages de retrait de l'échange Bitmex et inconvénients Feb 21, 2025 pm 10:48 PM

Exigences de retrait des devises d'échange Bitmex: la vérification en deux étapes et la vérification de l'identité doivent être terminées. Le montant minimum de retrait varie selon les devises. Le processus de retrait comprend la connexion au compte, la saisie de l'adresse de retrait, la saisie du montant et la confirmation des transactions. Les avantages du retrait Bitmex comprennent un traitement rapide, des frais de manutention faible, un support de devises multiples et des mesures de sécurité strictes. Cependant, il fait également face à des lacunes telles que une supervision insuffisante, un risque d'attaques de pirates, des restrictions sur les retraits et les gels de compte.

Le dernier classement des applications de trading de devises numériques en 2025 Le dernier classement des applications de trading de devises numériques en 2025 Feb 27, 2025 pm 06:24 PM

Les dix principales applications de trading de devises numériques en 2025 sont: Binance, Okx, Gate.io, Bitget, Huobi, Kucoin, Bitmart, Bybit, BitFinex et Poloniex. Ces transactions se distinguent sur le marché de leur volume de trading, de leur sélection d'actifs, de leur négociation à effet de levier, de leur trading social, de leur conformité, de leur facilité d'utilisation, des frais de transaction bas et de la sécurité des fonds.

Comment échanger à Trezor et quoi noter Comment échanger à Trezor et quoi noter Feb 21, 2025 pm 10:30 PM

Transactions sur Trezor Connectez le périphérique Trezor et installez l'application Trezorbridge. Ouvrez la suite Trezor et sélectionnez le type de transaction (envoyer, recevoir ou échanger). Entrez les détails de la transaction (adresse, montant, frais, etc.). Vérifiez les détails et appuyez sur Confirmer sur le périphérique Trezor pour autoriser la transaction.

Programme PHP pour compter les voyelles dans une chaîne Programme PHP pour compter les voyelles dans une chaîne Feb 07, 2025 pm 12:12 PM

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

See all articles