如果我将其声明为单身类:
// Server.php
class Server {
private $stopper;
private static $instance;
public static getInstance() {
if(!isset(self::$Server))
self::$Server = new static();
return self::$Server;
}
public function setStopper() { $this->stopper = TRUE; }
public function startServer() {
$self = $this;
$consumer = new Consumer();
$consumer->onConsume(function($data) use($self, $consumer) {
// some processing
if($self->getStopper()) { // always false
$consumer->stop();
$self->stopServer();
}
});
$consumer->consume();
}
public function stopServer() { ... }
}
使用以下脚本启动服务器:
// start.php
$server = Server::getInstance();
$server->startServer();
按照脚本设置塞子:
// stop.php
$server = Server::getInstance();
$server->setStopper();
它不起作用:塞子仍然是假的(试过echo
)!我也尝试过使用会话。
// start.php
$server = new Server();
session_start();
$_SESSION['server'] = $server;
session_write_close();
$server->startServer();
// stop.php
session_start();
$server = $_SESSION['server'];
$server->setStopper(TRUE);
但是运行stop.php会引发以下错误:Undefined index: server
答案 0 :(得分:0)
感谢@ Maximus2012和@Sammitch。
我从Google小组的以下帖子中得到了一个想法
https://groups.google.com/d/msg/phirehose-users/dvCZ9EvCNA8/nOiv3m2ByAEJ
我使用外部.txt
文件来存储标志并设置塞子而不是所有这些惨败;)
<强>更新强>
我发现为什么在这种情况下不可能与单身人士合作。每次调用php时,都会创建一个单独的进程(或线程,具体取决于服务器)来处理该请求,即start.php
和stop.php
的单独进程(或线程),并且它们无法访问由于“进程间隐私”,单身人士!
但是,如果我将start.php和stop.php作为单个进程运行,它会正常工作!