From cb452abc7bcda94073cfe0d136e831252374853d Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 07 二月 2026 19:30:57 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(NPC成长表增加等级字段;)

---
 ServerPython/EventServerPY/server.py |   31 +++++++++++--------------------
 1 files changed, 11 insertions(+), 20 deletions(-)

diff --git a/ServerPython/EventServerPY/server.py b/ServerPython/EventServerPY/server.py
index c69bbc5..1643324 100644
--- a/ServerPython/EventServerPY/server.py
+++ b/ServerPython/EventServerPY/server.py
@@ -29,7 +29,6 @@
         self.running = True
         self.recv_buffer = ''
         self.lock = threading.Lock()
-        self.consecutive_discards = 0  # 连续丢弃计数器
         
         # 创建接收线程
         self.recv_thread = threading.Thread(target=self._recv_loop)
@@ -44,7 +43,10 @@
                 readable, _, _ = select.select([self.sock], [], [], 1.0)
                 
                 if readable:
-                    data = self.sock.recv(4096)
+                    # 接收缓冲区大小: 建议至少是最大包长度的2倍,避免频繁recv调用
+                    # 最大包 = 4(header) + 8192(payload) = 8196 字节
+                    # 使用32768可以容纳3-4个完整包,提高效率
+                    data = self.sock.recv(32768)
                     
                     if not data:
                         # 连接断开
@@ -65,10 +67,6 @@
                 print('[Connection] Error: %s' % str(e))
                 break
 
-        # 检查是否因大量无效包需要关闭
-        if self.consecutive_discards > 1000:
-            print('[Connection] Too many invalid packets, closing connection %d' % self.cid)
-        
         self.close()
     
     def _try_parse_packet(self):
@@ -78,7 +76,7 @@
         # PacketHeader: FF CC (2字节) + Length (2字节) = 4字节
         PACKET_HEADER_SIZE = 4
         PACKET_HEADER_MC = 0xCCFF
-        MAX_PACKET_LEN = 2048
+        MAX_PACKET_LEN = 8192
 
         if len(self.recv_buffer) < PACKET_HEADER_SIZE:
             return False
@@ -86,13 +84,9 @@
         # 检查 MagicCode (FF CC)
         magic_code = struct.unpack('<H', self.recv_buffer[0:2])[0]
         if magic_code != PACKET_HEADER_MC:
-            # 丢弃第一个字节,继续尝试
-            self.consecutive_discards += 1
-            if self.consecutive_discards > 1000:
-                packet_logger.log_text('Too many invalid packets, closing connection', 'ERROR')
-                return False
-            packet_logger.log_text('Invalid magic code: 0x%04X, discard byte (count: %d)' % (magic_code, self.consecutive_discards), 'WARN')
-            self.recv_buffer = self.recv_buffer[1:]
+            # 整个缓冲区数据无效,清空等待新数据
+            packet_logger.log_text('Invalid magic code: 0x%04X, clear buffer data: %s' % (magic_code, self.recv_buffer), 'WARN')
+            self.recv_buffer = ''
             return False
 
         # 读取包长度(不包含PacketHeader本身)
@@ -100,9 +94,9 @@
 
         # 检查包长度是否合理
         if packet_len > MAX_PACKET_LEN:
-            self.consecutive_discards += 1
-            packet_logger.log_text('Packet length %d exceeds max %d, discard byte (count: %d)' % (packet_len, MAX_PACKET_LEN, self.consecutive_discards), 'WARN')
-            self.recv_buffer = self.recv_buffer[1:]
+            # 整个缓冲区数据无效,清空等待新数据
+            packet_logger.log_text('Packet length %d exceeds max %d, clear buffer. Buffer data: %s' % (packet_len, MAX_PACKET_LEN, self.recv_buffer), 'WARN')
+            self.recv_buffer = ''
             return False
 
         # 计算总长度(包含PacketHeader)
@@ -115,9 +109,6 @@
         # 提取协议数据(跳过4字节PacketHeader,只传Cmd/SubCmd及之后的数据)
         packet_data = self.recv_buffer[PACKET_HEADER_SIZE:total_len]
         self.recv_buffer = self.recv_buffer[total_len:]
-
-        # 重置丢弃计数器
-        self.consecutive_discards = 0
 
         # 交给包处理器处理
         self.packet_processor.add_packet(self.cid, packet_data)

--
Gitblit v1.8.0