Browse Source

防止并发问题增加文件锁

郑晓宇 6 years ago
parent
commit
3cf8bf920a
1 changed files with 22 additions and 1 deletions
  1. 22 1
      app/Home/Controllers/GameController.php

+ 22 - 1
app/Home/Controllers/GameController.php

@@ -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'] = '获取成功';