启动Server

                      ./zkServer.sh start

启动client:(*">

ホームページ > バックエンド開発 > PHPチュートリアル > phpはZookeeperインスタンスに接続します

phpはZookeeperインスタンスに接続します

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-13 12:13:53
オリジナル
1249 人が閲覧しました

PHP は、Zookeeper インスタンスに接続します

1. Zookeeper のインストールが成功したら、Zookeeper の bin ディレクトリで対応する起動スクリプトを開始します

Start Server

./zkServer.sh start

クライアントの起動: (*注意: cli には Java がインストールされている必要があります) :

クラス
ZookeeperDemo 拡張 Zookeeper {

パブリック関数 watcher( $i, $type , $key ) {

エコー "Insider Watchern" ;

// ウォッチャーが消費されるため、新しいウォッチャーを設定する必要があります $this->get(

' /test', array ($this, 'ウォッチャー' ) ); }

}

$zoo =

新しい ZookeeperDemo( '127.0.0.1:2181' );
$zoo->get( '/test' > 'ウォッチャー' ) ); その間 (

true ) { エコー

'。' ; sleep(2); }リーダーとワーカーのタスクの割り当て:

クラス




ワーカー

拡張 動物園の飼育員 {

const

CONTAINER = '/cluster' ;

保護されています

$acl = 配列(
配列 (

「パーマ」 => 飼育員:: PERM_ALL
のスキーム => '世界'
'id' => 「誰でも」 ) );
プライベート $isLeader = false;
private $znode ;
パブリック関数 __construct( $host = '', $watcher_cb = null , $recv_timeout = 10000 ) {
: : __construct( $host, $watcher_cb, $recv_timeout );
}
パブリック関数 register() {
if( ! $this- >exists( 自分 ::コンテナ ) ) {
$this->create( self ::コンテナ null, $this-> acl );
}
$this->znode = $this->create( self ::CONTAINER . '/w-'
null ,
$this-> acl、
動物園飼育員::動物園飼育員::SEQUENCE );
$this-> znode = str_replace( self ::コンテナ .'/' , '' , $this-> znode );
printf( "私は %sn として登録されています", $this-> znode );
$watching = $this->watchPrevious();
if( $watching == $ this-> znode ) {
printf( 「ここには誰もいません、私がリーダーです」 );
$this->setLeader( true );
}
else {
printf( "%sn を見ています" , $watching );
}
}
パブリック関数 watchPrevious () {
$workers = $this->getChildren( 自分 ::コンテナ );
sort( $workers );
$size = sizeof( $workers );
for( $i = 0 ; $i < $size ; $i++ ) {

if( $this-> znode == $workers[ $i ] ) {

if ( $i > 0 ) { $this->get(
self ::コンテナ . '/' . $workers[ $i - 1 ], array ( $this, 'watchNode' ) );
return $workers[ $i - 1 ]; }
戻る $workers[ $i ]; }
}
新規スロー Exception( sprintf( 「何か問題が発生しました。自分自身が見つかりません: %s/%s」
自身 ::コンテナ
$this-> znode ) );
}
パブリック関数 watchNode( $i, $type, $name ) {
$watching = $this->watchPrevious();
if( $watching == $this-> znode ) {
printf( 「私が新しいリーダーです!n」 );
$this->setLeader( true );
}
else {
printf( "今、%sn を見ています" , $watching );
}
}
パブリック関数 isLeader() {
戻る $this-> はリーダー ;
}
パブリック関数 setLeader( $flag) {
$this-> isLeader = $flag;
}
公開関数 run() {
$this->register();
その間( true ) {
if( $this ->isLeader() ) {
$this->doLeaderJob();
}
else {
$this->doWorkerJob();
}
睡眠( 2 );
}
}
パブリック関数 doLeaderJob() {
エコー "Leadingn" ;
}
パブリック関数 doWorkerJob() {
エコー "作業中" ;
}
}
$worker = 新しい ワーカー( '127.0.0.1 :2181' );
$worker->run(); 3 つの PHP プロセスを開始し、スクリプトの実行を表示できます。
プロセス 1:
[[email protected] Zookeeper]# php -f worker.php
私は w-0000000010 として登録されています
ここには誰もいません、私がリーダーです
リーダーです
プロセス 2:
[[email protected] Zookeeper]$ php -f worker.php
私は w-0000000011 として登録されています
私は w-0000000010 を監視しています
作業中
プロセス 3:
[[email protected] Zookeeper]$ php -f worker.php
私は w-0000000012 として登録されています
私は w-0000000011 を監視しています
作業中

ctrl + c リーダープロセスを閉じた後、プロセス 2 と 3 で新しいリーダーが選出されることがわかります





関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート