hch
7 天以前 f356b16e3fe29364ad7e2710ccc0564d90f03ea4
468 游戏事件记录服务器-py版本
1个文件已修改
24 ■■■■ 已修改文件
ServerPython/EventServerPY/server.py 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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)
@@ -68,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):
@@ -89,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本身)
@@ -103,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)
@@ -118,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)