|
@@ -33,6 +33,18 @@ class GameController extends Controller
|
|
|
if(!$cur_question){
|
|
|
$cur_question = 1;
|
|
|
}
|
|
|
+ //防止并发问题加文件锁
|
|
|
+ $Lock_file = "{$room_id}_lock_file.txt";
|
|
|
+ $i = 1;
|
|
|
+ while ($i < 30) {
|
|
|
+ $fp = fopen($Lock_file, "r");
|
|
|
+ if($fp===false){
|
|
|
+ sleep(1);
|
|
|
+ }else{
|
|
|
+ flock($fp,LOCK_EX);//获取独占锁
|
|
|
+ }
|
|
|
+ $i++;
|
|
|
+ }
|
|
|
//获取当前房间问题
|
|
|
$questions = Redis::get($room_id . '_questions');
|
|
|
if($questions){
|
|
@@ -40,7 +52,7 @@ class GameController extends Controller
|
|
|
}else{
|
|
|
$questions = [];
|
|
|
}
|
|
|
- if(isset($questions[$cur_question -1 ])){
|
|
|
+ if(isset($questions[$cur_question -1])){
|
|
|
$response['info'] = $questions[$cur_question - 1];
|
|
|
}else{
|
|
|
$questions_id = [];
|
|
@@ -57,6 +69,15 @@ class GameController extends Controller
|
|
|
Redis::set($room_id . '_questions', json_encode($questions));
|
|
|
$response['info'] = $info;
|
|
|
}
|
|
|
+
|
|
|
+ //解锁
|
|
|
+ if($fp!==false){
|
|
|
+ @flock($fp,LOCK_UN);
|
|
|
+ clearstatcache();
|
|
|
+ }
|
|
|
+ @fclose($fp);
|
|
|
+ @unlink($Lock_file);
|
|
|
+
|
|
|
//设置返回数据
|
|
|
$response['code'] = 0;
|
|
|
$response['msg'] = '获取成功';
|