我开发了一款在线游戏。它有一个名为automations.php
的文件,它负责所有类型的自动化任务,如训练士兵,处理战斗等。我的问题有时会被执行两次:
class automation{
function automation(){
if(!file_exists('traning.txt')){
file_put_contents('traning.txt' ,'');
$this->train_soldiers();
}
}
private function train_soldiers(){@unlink('traning.txt');}
}
正如您所看到的,train_soldiers
应该只执行一次,但是当有很多在线玩家时,功能会被执行两次(在两个不同的请求上)。我的问题是如何解决这个问题?
答案 0 :(得分:3)
您需要将文件保留在那里以供将来请求使用:
class automation{
function automation(){
if(!file_exists('traning.txt')){
$fp = fopen('traning.txt', 'r+');
if (flock($fp, LOCK_EX, false)) {
$this->train_soldiers();
flock($fp, LOCK_UN);
}
fclose($fp);
}
}
private function train_soldiers(){/** do all training, don't remove the file**/}
}
这样下一个请求就不会执行它。
更新1:添加了群组功能。如果这不起作用,请告知您的意思,它不起作用。