Comment installer l'extension zookeeper pour php
Comment installer l'extension zookeeper en PHP : téléchargez d'abord zookeeper ; puis spécifiez le répertoire d'installation ; enfin installez zookeeper via "make && make install".
L'environnement d'exploitation de cet article : système Windows 7, PHP7.1, ordinateur Dell G3.
ZooKeeper est un service de coordination d'applications distribuées et open source. Il s'agit d'une implémentation open source de Chubby de Google et d'un composant important de Hadoop et Hbase. Il s'agit d'un logiciel qui fournit des services cohérents pour les applications distribuées. Les fonctions fournies incluent : la maintenance de la configuration, les services de noms de domaine, la synchronisation distribuée, les services de groupe, etc.
L'objectif de ZooKeeper est d'encapsuler des services clés complexes et sujets aux erreurs et de fournir aux utilisateurs des interfaces simples et faciles à utiliser ainsi qu'un système doté de performances efficaces et de fonctions stables.
Pour utiliser zookeeper en php, vous devez d'abord installer l'extension php zookeeper
Télécharger. ici La dernière version stable
http://mirror.bit.edu.cn/apache/zookeeper/stable/
cd /download
wget http://mirror .bit.edu.cn/apache/zookeeper/stable/zookeeper-3.4.12.tar.gz //Il s'agit d'un outil qui a été installé. Nous devons maintenant le compiler et l'installer nous-mêmes, car il sera utilisé lors de l'installation. Extensions PHP plus tard
tar -zxvf zookeeper-3.4.12.tar.gz
cd zookeeper-3.4.12/src/c/
./configure -- prefix=/usr /local/zookeeper //Spécifiez le répertoire d'installation
make && make install
L'installation est terminée
2 Installez l'extension php zookeeper sur http : //pecl. Trouvez
cd /download
wget http://pecl.php.net/get/zookeeper-0.6.2.tgz
dans php.net /package/zookeeper tar -zxvf zookeeper-0.6.2.tgz
cd zookeeper-0.6.2
./configure --with-libzookeeper-dir=/usr/local/zookeeper / /Spécifier les dépendances
make && make install
Configurer php.ini
extension="/usr/local/Cellar/php/7.2.6/pecl/20170718/zookeeper .so"
Redémarrez simplement php-fpm.
[Recommandé : "
Tutoriel vidéo PHP"]3. Installez jdk avant de démarrer zookeeper. S'il est déjà installé, vous pouvez l'ignorer
sur http:/ Téléchargez depuis /www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html puis installez-le comme un imbécile, je n'entrerai pas dans les détails ici
./zkCli.sh -server 127.0.0.1:2181
cd ../conf
5. Test de code PHPCode de test
<?php /** * */ class zookeeperDemo { private $zookeeper; function __construct($address) { $this->zookeeper = new Zookeeper($address); } /* * get */ public function get($path) { if (!$this->zookeeper->exists($path)) { return null; } return $this->zookeeper->get($path); } public function getChildren($path) { if (strlen($path) > 1 && preg_match('@/$@', $path)) { // remove trailing / $path = substr($path, 0, -1); } return $this->zookeeper->getChildren($path); } /* * set 值 * * */ public function set($path, $value) { if (!$this->zookeeper->exists($path)) { //创建节点 $this->makePath($path); } else { $this->zookeeper->set($path,$value); } } /* * 创建路径 */ private function makePath($path, $value='') { $parts = explode('/', $path); $parts = array_filter($parts);//过滤空值 $subPath = ''; while (count($parts) > 1) { $subPath .= '/' . array_shift($parts);//数组第一个元素弹出数组 if (!$this->zookeeper->exists($subpath)) { $this->makeNode($subPath, $value); } } } /* * 创建节点 * */ private function makeNode($path, $value, array $params = array()) { if (empty($params)) { $params = [ [ 'perms' => Zookeeper::PERM_ALL, 'scheme' => 'world', 'id' => 'anyone' ] ]; } return $this->zookeeper->create($path, $value, $params); } /* * 删除 **/ public function deleteNode($path) { if (!$this->zookeeper->exists($path)) { return null; } else { return $this->zookeeper->delete($path); } } } $zk = new zookeeperDemo('localhost:2181'); //var_dump($zk->get('/zookeeper')); var_dump($zk->getChildren('/foo')); //var_dump($zk->deleteNode("/foo")); ?> 测试代码2、 <?php /** * PHP Zookeeper * * PHP Version 5.3 * * The PHP License, version 3.01 * * @category Libraries * @package PHP-Zookeeper * @author Lorenzo Alberton <l.alberton@quipo.it> * @copyright 2012 PHP Group * @license http://www.php.net/license The PHP License, version 3.01 * @link https://github.com/andreiz/php-zookeeper */ /** * Example interaction with the PHP Zookeeper extension * * @category Libraries * @package PHP-Zookeeper * @author Lorenzo Alberton <l.alberton@quipo.it> * @copyright 2012 PHP Group * @license http://www.php.net/license The PHP License, version 3.01 * @link https://github.com/andreiz/php-zookeeper */ class Zookeeper_Example { /** * @var Zookeeper */ private $zookeeper; /** * @var Callback container */ private $callback = array(); /** * Constructor * * @param string $address CSV list of host:port values (e.g. "host1:2181,host2:2181") */ public function __construct($address) { $this->zookeeper = new Zookeeper($address); } /** * Set a node to a value. If the node doesn't exist yet, it is created. * Existing values of the node are overwritten * * @param string $path The path to the node * @param mixed $value The new value for the node * * @return mixed previous value if set, or null */ public function set($path, $value) { if (!$this->zookeeper->exists($path)) { $this->makePath($path); $this->makeNode($path, $value); } else { $this->zookeeper->set($path, $value); } } /** * Equivalent of "mkdir -p" on ZooKeeper * * @param string $path The path to the node * @param string $value The value to assign to each new node along the path * * @return bool */ public function makePath($path, $value = '') { $parts = explode('/', $path); $parts = array_filter($parts); $subpath = ''; while (count($parts) > 1) { $subpath .= '/' . array_shift($parts); if (!$this->zookeeper->exists($subpath)) { $this->makeNode($subpath, $value); } } } /** * Create a node on ZooKeeper at the given path * * @param string $path The path to the node * @param string $value The value to assign to the new node * @param array $params Optional parameters for the Zookeeper node. * By default, a public node is created * * @return string the path to the newly created node or null on failure */ public function makeNode($path, $value, array $params = array()) { if (empty($params)) { $params = array( array( 'perms' => Zookeeper::PERM_ALL, 'scheme' => 'world', 'id' => 'anyone', ) ); } return $this->zookeeper->create($path, $value, $params); } /** * Get the value for the node * * @param string $path the path to the node * * @return string|null */ public function get($path) { if (!$this->zookeeper->exists($path)) { return null; } return $this->zookeeper->get($path); } /** * List the children of the given path, i.e. the name of the directories * within the current node, if any * * @param string $path the path to the node * * @return array the subpaths within the given node */ public function getChildren($path) { if (strlen($path) > 1 && preg_match('@/$@', $path)) { // remove trailing / $path = substr($path, 0, -1); } return $this->zookeeper->getChildren($path); } /** * Delete the node if it does not have any children * * @param string $path the path to the node * * @return true if node is deleted else null */ public function deleteNode($path) { if(!$this->zookeeper->exists($path)) { return null; } else { return $this->zookeeper->delete($path); } } /** * Wath a given path * @param string $path the path to node * @param callable $callback callback function * @return string|null */ public function watch($path, $callback) { if (!is_callable($callback)) { return null; } if ($this->zookeeper->exists($path)) { if (!isset($this->callback[$path])) { $this->callback[$path] = array(); } if (!in_array($callback, $this->callback[$path])) { $this->callback[$path][] = $callback; return $this->zookeeper->get($path, array($this, 'watchCallback')); } } } /** * Wath event callback warper * @param int $event_type * @param int $stat * @param string $path * @return the return of the callback or null */ public function watchCallback($event_type, $stat, $path) { if (!isset($this->callback[$path])) { return null; } foreach ($this->callback[$path] as $callback) { $this->zookeeper->get($path, array($this, 'watchCallback')); return call_user_func($callback); } } /** * Delete watch callback on a node, delete all callback when $callback is null * @param string $path * @param callable $callback * @return boolean|NULL */ public function cancelWatch($path, $callback = null) { if (isset($this->callback[$path])) { if (empty($callback)) { unset($this->callback[$path]); $this->zookeeper->get($path); //reset the callback return true; } else { $key = array_search($callback, $this->callback[$path]); if ($key !== false) { unset($this->callback[$path][$key]); return true; } else { return null; } } } else { return null; } } } $zk = new Zookeeper_Example('localhost:2181'); // var_dump($zk->get('/')); // var_dump($zk->getChildren('/')); // var_dump($zk->set('/test', 'abc')); // var_dump($zk->get('/test')); // var_dump($zk->getChildren('/')); // var_dump($zk->set('/foo/001', 'bar1')); // var_dump($zk->set('/foo/002', 'bar2')); // var_dump($zk->get('/')); // var_dump($zk->getChildren('/')); // var_dump($zk->getChildren('/foo')); //watch example 一旦/test节点的值被改变,就会调用一次callback function callback() { echo "in watch callback\n"; } //$zk->set('/test', 1); $ret = $zk->watch('/test', 'callback'); //$zk->set('/test', 2);//在终端执行 while (true) { sleep(1); } /* class ZookeeperDemo extends Zookeeper { public function watcher( $i, $type, $key ) { echo "Insider Watcher\n"; // Watcher gets consumed so we need to set a new one //ZooKeeper提供了可以绑定在znode的监视器。如果监视器发现znode发生变化,该service会立即通知所有相关的客户端。这就是PH//P脚本如何知道变化的。Zookeeper::get方法的第二个参数是回调函数。当触发事件时,监视器会被消费掉,所以我们需要在回调函 //数中再次设置监视器。 $this->get( '/test', array($this, 'watcher' ) ); } } $zoo = new ZookeeperDemo('127.0.0.1:2181'); $zoo->get( '/test', array($zoo, 'watcher' ) ); while( true ) { echo '.'; sleep(2); } */ /* // $zc = new Zookeeper(); // $zc->connect('127.0.0.1:2181'); // var_dump($zc->get('/zookeeper')); // exit; */ ?>
- Lien de référence du code :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

À mesure que les applications modernes continuent d’évoluer et que le besoin de haute disponibilité et de simultanéité augmente, les architectures de systèmes distribués deviennent de plus en plus courantes. Dans un système distribué, plusieurs processus ou nœuds s'exécutent en même temps et accomplissent des tâches ensemble, et la synchronisation entre les processus devient particulièrement importante. Étant donné que de nombreux nœuds d'un environnement distribué peuvent accéder simultanément à des ressources partagées, la manière de gérer les problèmes de concurrence et de synchronisation est devenue une tâche importante dans un système distribué. À cet égard, ZooKeeper est devenu une solution très populaire. ZooKee

Avec le développement rapide d'Internet, les systèmes distribués sont devenus l'une des infrastructures de nombreuses entreprises et organisations. Pour qu’un système distribué fonctionne correctement, il doit être coordonné et géré. À cet égard, ZooKeeper et Curator sont deux outils qui valent la peine d'être utilisés. ZooKeeper est un service de coordination distribué très populaire qui peut nous aider à coordonner l'état et les données entre les nœuds d'un cluster. Curator est une encapsulation de ZooKeeper

Les méthodes d'implémentation des verrous distribués incluent généralement : la base de données, le cache (comme Redis), Zookeeper, etc. Dans le développement réel, Redis et Zookeeper sont les plus couramment utilisés, cet article ne parlera donc que de ces deux-là.

PHP est un langage de programmation très populaire largement utilisé dans les applications Web et le développement côté serveur. Zookeeper est un service de coordination distribué utilisé pour gérer, coordonner et surveiller les applications et services distribués. L'utilisation de Zookeeper dans les applications PHP peut améliorer les performances et la fiabilité de votre application. Cet article explique comment utiliser l'extension Zookeeper pour PHP. 1. Installez l'extension Zookeeper Pour utiliser l'extension Zookeeper, vous devez installer Zookeeper.

Dans l'architecture des microservices, l'enregistrement et la découverte des services sont une question très importante. Pour résoudre ce problème, nous pouvons utiliser ZooKeeper comme centre d'enregistrement de services. Dans cet article, nous présenterons comment utiliser ZooKeeper dans le framework Beego pour implémenter l'enregistrement et la découverte de services. 1. Introduction à ZooKeeper ZooKeeper est un service de coordination distribué open source. Il s'agit de l'un des sous-projets d'Apache Hadoop. Le rôle principal de ZooKeeper
![[Collection recommandée] Torture de l'âme ! Canon à 31 coups du gardien de zoo](https://img.php.cn/upload/article/202308/28/2023082816453271532.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
ZooKeeper est un service de coordination distribué open source. Il s'agit d'un logiciel qui fournit des services de cohérence pour les applications distribuées. Les applications distribuées peuvent implémenter des tâches telles que la publication/abonnement de données, l'équilibrage de charge, le service de nommage, la coordination/notification distribuée, la gestion de cluster, l'élection du maître, les verrous distribués et les files d'attente distribuées et d'autres fonctions.

Avec le développement rapide de la technologie Internet, les systèmes distribués ont été largement utilisés dans les applications modernes, en particulier dans les grandes sociétés Internet. Cependant, dans un système distribué, il est très difficile de maintenir la cohérence entre les nœuds, c'est pourquoi le mécanisme de verrouillage distribué est devenu l'un des fondements pour résoudre ce problème. Dans la mise en œuvre de verrous distribués, Redis et ZooKeeper sont tous deux des outils populaires. Cet article les comparera et les analysera. Redis implémente des verrous distribués Redis est un stockage de données en mémoire open source

dockerpullzookeeperdockerrun --namezk01-p2181:2181--restartalways-d2e30cac00aca indique que zookeeper a démarré avec succès Zookeeper et Dubbo • ZooKeeperZooKeeper est un service de coordination d'applications distribuées et open source. Il s'agit d'un logiciel qui fournit des services cohérents pour les applications distribuées. Les fonctions fournies incluent : la maintenance de la configuration, les services de noms de domaine, la synchronisation distribuée, les services de groupe, etc. DubboDubbo est le framework de services distribués open source d'Alibaba. Sa plus grande caractéristique est qu'il est structuré en plusieurs couches.
