php зоопарк наблюдатель не работает

Я пытаюсь использовать Zookeeper в приложении PHP, и я сделал большую часть get($path)/set($path, $value)/getChildren($path) функции следующие https://github.com/andreiz/php-zookeeper, кроме watch_callback функция, которая просто не работает.

Моя версия php 5.6.14 и безопасность потоков отключена, и я использую apache2.4.

Вот фрагмент кода

class Zookeeper_Module {

private $zookeeper;

public function __construct(){
$this->ci = & get_instance();
$zookeeper_server = $this->ci->config->item('zookeeper_server');

$this->zookeeper = new Zookeeper($zookeeper_server);
}

public function set($path, $value){
$this->zookeeper->set($path, $value);
}

public function get($path, $watch_cb = null){
return $this->zookeeper->get($path, $watch_cb);
}

public function get_watch_cb($event_type = '', $stat = '', $path = ''){
error_log('hello from get_watcher_cb');
$value = $this->get($path, array($this, 'get_watch_cb'));
// update redis cache
$this->ci->cache->redis->save('some cache key', $value);
}
}

class MyTest{
public function get(){
$zookeeper = new Zookeeper_Module ();

$value = $zookeeper->get( '/foo/bar', array (
$zookeeper,
'get_watch_cb'
) );
}

public function set(){
$zookeeper = new Zookeeper_Module ();
$zookeeper->set( '/foo/bar', 'some value');
}
}

Я могу успешно получить или установить значение узла, но я не могу ни перехватить журнал обратного вызова, ни обновить кэш redis.

0

Решение

Я пишу более простую демонстрацию, очень похожую с этим https://github.com/andreiz/php-zookeeper/wiki, и наблюдатель отлично работает в этой демонстрации.

Самая значительная разница

while( true ) {
echo '.';
sleep(2);
}

В то время как у java есть наблюдатели jvm-контейнера, у php нет контейнера для этого, поэтому мы должны использовать while(true) чтобы поддержать наблюдателей.

Поэтому я добавляю while(true) в моем коде и теперь наблюдатель работает нормально.

Но я не хочу добавлять ужасное while(true) В веб-приложении окончательное решение заключается в добавлении java-приложения для связи с zookeeper и сохранения результатов в redis, а php-приложение просто читает информацию из redis.

0

Другие решения

Других решений пока нет …