Browse Source

优化房间池

johnclot69 4 months ago
parent
commit
4883b82408

+ 5 - 0
incubator-game/src/main/java/com/incubator/game/GGame.java

@@ -19,6 +19,7 @@ import com.incubator.game.data.entity.GlobalInfoPO;
 import com.incubator.game.data.jdbc.LSDBHandler;
 import com.incubator.game.listener.PublicListener;
 import com.incubator.game.player.GPlayer;
+import com.incubator.game.room.Room;
 import com.incubator.game.room.RoomManager;
 import com.incubator.game.timer.FlushDB;
 import com.incubator.game.timer.RefreshNewDay;
@@ -33,6 +34,7 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ScheduledThreadPoolExecutor;
 
 public class GGame extends AbstractService {
@@ -95,6 +97,9 @@ public class GGame extends AbstractService {
     /** http消息事件 **/
     public static Map<String, HttpRequestHandler> httpHandlers = new HashMap<>();
 
+    /** 根据房间类型维护独立的对象池 [key:房间类型, value:对象池] **/
+    public static Map<Integer, LinkedBlockingQueue<Room>> roomPool = new ConcurrentHashMap<>();
+
     /** 本服所有在线玩家 */
     public static Map<String, GPlayer> onlinePlayers = new ConcurrentHashMap<>();
 

+ 0 - 4
incubator-game/src/main/java/com/incubator/game/player/Player.java

@@ -1,9 +1,7 @@
 package com.incubator.game.player;
 
-import com.incubator.common.log4j.Log4jUtil;
 import com.incubator.game.GGame;
 import com.incubator.game.data.entity.PlayerInfoPO;
-import org.slf4j.Logger;
 
 import java.util.Date;
 
@@ -12,8 +10,6 @@ import java.util.Date;
  */
 public class Player extends GPlayer {
 
-    protected Logger logger = Log4jUtil.getLogger(getClass());
-
     /** 玩家数据 **/
     public PlayerInfoPO data;
 

+ 3 - 4
incubator-game/src/main/java/com/incubator/game/room/RoomManager.java

@@ -20,8 +20,7 @@ public class RoomManager {
     protected Logger logger = Log4jUtil.getLogger(getClass());
 
     private static RoomManager instance;
-    /** 根据房间类型维护独立的对象池 [key:房间类型, value:对象池] **/
-    private final Map<Integer, LinkedBlockingQueue<Room>> poolMap = new ConcurrentHashMap<>();
+
     /** 房间缓存 [key:房间类型, value:房间实例] **/
     public Map<Integer, Room> roomMap = new ConcurrentHashMap<>();
 
@@ -92,7 +91,7 @@ public class RoomManager {
      * @return
      */
     private Room acquireRoom(int roomType) {
-        LinkedBlockingQueue<Room> pool = poolMap.computeIfAbsent(roomType, k -> new LinkedBlockingQueue<>(GGame.MAX_ROOM_POOL_SIZE));
+        LinkedBlockingQueue<Room> pool = GGame.roomPool.computeIfAbsent(roomType, k -> new LinkedBlockingQueue<>(GGame.MAX_ROOM_POOL_SIZE));
         Room room = pool.poll(); // 尝试从池中取一个对象
         if (room == null) {
             room = RoomFactory.createRoom(roomType); // 创建指定类型的房间
@@ -112,7 +111,7 @@ public class RoomManager {
         }
         // 清理房间对象状态
         room.reset();
-        LinkedBlockingQueue<Room> pool = poolMap.computeIfAbsent(roomType, k -> new LinkedBlockingQueue<>(GGame.MAX_ROOM_POOL_SIZE));
+        LinkedBlockingQueue<Room> pool = GGame.roomPool.computeIfAbsent(roomType, k -> new LinkedBlockingQueue<>(GGame.MAX_ROOM_POOL_SIZE));
         // 如果池未满,则放回池中
         if (pool.size() < GGame.MAX_ROOM_POOL_SIZE) {
             pool.offer(room);