当前位置:Gxlcms > PHP教程 > 倾覆常识-死循环结构代码,也有机会执行循环外的逻辑

倾覆常识-死循环结构代码,也有机会执行循环外的逻辑

时间:2021-07-01 10:21:17 帮助过:36人阅读

颠覆常识 -- 死循环结构代码,也有机会执行循环外的逻辑

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
$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);
}


现在运行该脚本。

$ php zookeeperdemo1.php
此处应该会每隔2秒产生一个点。现在切换到ZooKeeper客户端,并更新“/test”值。

[zk: 127.0.0.1:2181(CONNECTED) 20] set /test foo
这样就会静默触发PHP脚本中的“Insider Watcher”消息。


怎么会这样的?进入while结构后,为什么还能执行watcher方法。请各位看官发表讨论。


分享到:


------解决方案--------------------
分布式应用?
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,包含一个简单的原语集,是Hadoop和Hbase的重要组件。目前提供Java和C的接口。

你说是颠覆常识,也是可以理解的
------解决方案--------------------
Watcher gets consumed so we need to set a new one
你做这个,应该比我还要清楚

php Zookeeper 时时都在侦听 php 的行为
------解决方案--------------------
主线程死循环中,子线程继续执行任务,这不是很正常么?
------解决方案--------------------
php中有个pcntl 能 fork出多进程执行

人气教程排行