ホームページ  >  記事  >  バックエンド開発  >  phpはZookeeperインスタンスに接続します

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

WBOY
WBOYオリジナル
2016-06-23 13:41:141114ブラウズ

インストールの成功 1. インストールが正常に完了すると、Zookeeper の BIN ディレクトリに対応する起動スクリプトがあります

サーバーの起動

./zkserver.sh start


クライアントを起動します: (*注意: CLI が必要ですjava))

wath($ i、$ type、$ key){

"Insider watchern"($ this、 'watcher'));

} $zoo = new ZookeeperDemo( '127.0.0.1:2181' );

$zoo->get( '/test' ,

array

($zoo, 'watcher' ) ); while (

true

) {

echo

'.' ;

sleep(2) }

リーダーとワーカーのタスク 分布:

クラス

労働者

拡張

動物園飼育員 {

const CONTAINER = '/cluster'

protected $acl = array (

; ;




プライベート

$znode

パブリック関数

__construct ( $host = '' 、 $watcher_cb =

null 、 $recv_timeout = 10000 ) { parent

:: __construct( $host, $watcher_cb, $recv_timeout );

}

public function

register() {

if

( ! $this->exists(

自分

:: CONTAINER ) ) { $this->create ( self :: CONTAINER ,

null

, $this-> acl ) }

$this->znode = $this ->create(

self

::CONTAINER . '/ w-' ,

null ,

$this->acl、

動物園の飼育員:: 一時的な | Zookeeper::SEQUENCE );

$this->  znode = str_replace( self :: CONTAINER . '/' , '' , $this-> znode );

printf( "私は次のように登録されています: %sn" , $this-> znode );

$watching = $this->watchPrevious();

if ( $watching == $this-> znode ) {

printf( "ここには誰もいません、私がリーダーです" );

$this->setLeader( true );

}

else {

printf( "%sn を見ています" , $watching );

}

}

public function watchPrevious() {

$workers = $this->getChildren( self :: CONTAINER );

sort( $workers );

$size = sizeof( $workers );

for ( $i = 0 ; $i < $size ; $i++ ) {

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

if ( $i > 0 ) {

$this->get( self :: CONTAINER . '/' . $workers[ $i - 1 ], array ( $this, 'watchNode' ) );

return $workers[ $i - 1 ];

}

return $workers[ $i ];

}

}

throw new Exception( sprintf( "何か問題が発生しました! 自分自身を見つけることができません: %s/%s" ,

self :: コンテナ ,

$これ-> znode ) );

}

public function watchNode( $i, $type, $name ) {

$watching = $this->watchPrevious();

if ( $watching == $this-> znode ) {

printf( "私が新しいリーダーです!n" );

$this->setLeader( true );

}

else {

printf( "今、%sn を見ています" , $watching );

}

}

public function isLeader() {

return $this->   リーダーです;

}

public function setLeader($flag) {

$this->  isLeader = $flag;

}

public function run() {

$this->register();

while ( true ) {

if ( $this->isLeader() ) {

$this-> doLeaderJob();

}

else {

$this->doWorkerJob();

}

sleep( 2 );

}

}

public function doLeaderJob() {

echo "Leadingn" ;

}

public function doWorkerJob() {

echo "Workingn" ;

}

}

$worker = new Worker( '127.0.0.1:2181' );

$worker->run();

3 つの php プロセスを実行でき、スクリプトの実行を確認できます。
手順 1:
[root@localhost Zookeeper]# php -f worker.php
私は w-0000000010 として登録されています
ここには誰もいません、私がその者ですリーダー
リーダー
进程 2:
[daniel.luo@localhost Zookeeper]$ php -f worker.php
私は w-0000000011 として登録しています
私は w-0000000010 を監視しています
働いています
进程 3:
[ダニエル.luo@localhost Zookeeper]$ php -f worker.php
私は w-0000000012 として登録しています
w-0000000011 を監視しています
作業中

ctrl + c 关闭リーダー进程後、会発行现进程2与3会新たに登場したリーダー





声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。