Maison développement back-end Problème PHP Comment installer l'extension zookeeper pour php

Comment installer l'extension zookeeper pour php

Mar 08, 2021 am 10:31 AM
zookeeper

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".

Comment installer l'extension zookeeper pour php

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

4. Démarrez zookeeper

cd /download/zookeeper-3.4.12/bin

./zkServer.sh start

./zkCli.sh -server 127.0.0.1:2181

mode cli activé

Remarque :

Si une erreur est signalée :

cd ../conf

cp zoo_sample.cfg zoo.cfg

Copiez le fichier

5. Test de code PHP

Code 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(&#39;@/$@&#39;, $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=&#39;&#39;)
 
{
 
$parts = explode(&#39;/&#39;, $path);
 
$parts = array_filter($parts);//过滤空值
 
$subPath = &#39;&#39;;
 
while (count($parts) > 1) {
 
$subPath .= &#39;/&#39; . array_shift($parts);//数组第一个元素弹出数组
 
if (!$this->zookeeper->exists($subpath)) {
 
$this->makeNode($subPath, $value);
 
}
 
}
 
}
 
/*
 
 * 创建节点
 
 *
 
 */
 
private function makeNode($path, $value, array $params = array())
 
{
 
if (empty($params)) {
 
$params = [
 
[
 
&#39;perms&#39; => Zookeeper::PERM_ALL,
 
&#39;scheme&#39; => &#39;world&#39;,
 
&#39;id&#39; => &#39;anyone&#39;
 
]
 
];
 
}
 
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(&#39;localhost:2181&#39;);
 
//var_dump($zk->get(&#39;/zookeeper&#39;));
 
var_dump($zk->getChildren(&#39;/foo&#39;));
 
//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&#39;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 = &#39;&#39;) {
 
$parts = explode(&#39;/&#39;, $path);
 
$parts = array_filter($parts);
 
$subpath = &#39;&#39;;
 
while (count($parts) > 1) {
 
$subpath .= &#39;/&#39; . 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(
 
&#39;perms&#39; => Zookeeper::PERM_ALL,
 
&#39;scheme&#39; => &#39;world&#39;,
 
&#39;id&#39; => &#39;anyone&#39;,
 
)
 
);
 
}
 
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(&#39;@/$@&#39;, $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, &#39;watchCallback&#39;));
 
}
 
}
 
}
 
 
 
/**
 
 * 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, &#39;watchCallback&#39;));
 
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(&#39;localhost:2181&#39;);
 
// var_dump($zk->get(&#39;/&#39;));
 
// var_dump($zk->getChildren(&#39;/&#39;));
 
// var_dump($zk->set(&#39;/test&#39;, &#39;abc&#39;));
 
// var_dump($zk->get(&#39;/test&#39;));
 
// var_dump($zk->getChildren(&#39;/&#39;));
 
// var_dump($zk->set(&#39;/foo/001&#39;, &#39;bar1&#39;));
 
// var_dump($zk->set(&#39;/foo/002&#39;, &#39;bar2&#39;));
 
// var_dump($zk->get(&#39;/&#39;));
 
// var_dump($zk->getChildren(&#39;/&#39;));
 
// var_dump($zk->getChildren(&#39;/foo&#39;));
 
 
 
//watch example 一旦/test节点的值被改变,就会调用一次callback
 
function callback() {
 
echo "in watch callback\n";
 
}
 
//$zk->set(&#39;/test&#39;, 1);
 
$ret = $zk->watch(&#39;/test&#39;, &#39;callback&#39;); 
 
//$zk->set(&#39;/test&#39;, 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( &#39;/test&#39;, array($this, &#39;watcher&#39; ) );
 
 
 
 }
 
 
 
}

$zoo = new ZookeeperDemo(&#39;127.0.0.1:2181&#39;);
$zoo->get( &#39;/test&#39;, array($zoo, &#39;watcher&#39; ) );
while( true ) {
 echo &#39;.&#39;;
 sleep(2);
}
*/
/*

// $zc = new Zookeeper();
 
// $zc->connect(&#39;127.0.0.1:2181&#39;);
// var_dump($zc->get(&#39;/zookeeper&#39;));
// exit;
*/
 
?>
Copier après la connexion

  1. Lien de référence du code :
https://github .com/php-zookeeper/php-zookeeper/blob/master/ examples/Zookeeper_Example.php

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!

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)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

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)

Utilisation de ZooKeeper pour le traitement des verrous distribués dans le développement d'API Java Utilisation de ZooKeeper pour le traitement des verrous distribués dans le développement d'API Java Jun 17, 2023 pm 10:36 PM

À 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

Utilisation de ZooKeeper et Curator pour la coordination et la gestion distribuées dans Beego Utilisation de ZooKeeper et Curator pour la coordination et la gestion distribuées dans Beego Jun 22, 2023 pm 09:27 PM

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

Dois-je utiliser Redis ou Zookeeper pour les verrous distribués ? Dois-je utiliser Redis ou Zookeeper pour les verrous distribués ? Aug 22, 2023 pm 03:48 PM

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à.

Comment utiliser l'extension Zookeeper de PHP ? Comment utiliser l'extension Zookeeper de PHP ? Jun 02, 2023 pm 09:01 PM

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.

Utiliser ZooKeeper pour implémenter l'enregistrement et la découverte de services dans Beego Utiliser ZooKeeper pour implémenter l'enregistrement et la découverte de services dans Beego Jun 22, 2023 am 08:21 AM

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 [Collection recommandée] Torture de l'âme ! Canon à 31 coups du gardien de zoo Aug 28, 2023 pm 04:45 PM

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.

Comparaison ZooKeeper de l'implémentation Redis des verrous distribués Comparaison ZooKeeper de l'implémentation Redis des verrous distribués Jun 20, 2023 pm 03:19 PM

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

Comment intégrer Dubbo Zookeeper dans SpringBoot Comment intégrer Dubbo Zookeeper dans SpringBoot May 17, 2023 pm 02:16 PM

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.

See all articles