# Chat-Room 服务器端文档 ## 📋 概述 Chat-Room服务器端是整个聊天室系统的核心,负责处理客户端连接、用户认证、消息路由、数据存储等核心功能。服务器采用多线程架构,支持并发连接,提供稳定可靠的聊天服务。 ## 🏗️ 服务器架构 ### 核心组件架构 ```mermaid graph TD subgraph "Chat-Room Server" MAIN[ChatRoomServer
主服务器] subgraph "管理器组件" UM[UserManager
用户管理器] CM[ChatManager
聊天管理器] FH[FileHandler
文件处理器] AI[AIHandler
AI处理器] end subgraph "数据层" DB[DatabaseManager
数据库管理器] FS[FileSystem
文件系统] end subgraph "配置层" CONFIG[ConfigManager
配置管理器] LOGGER[Logger
日志系统] end end MAIN --> UM MAIN --> CM MAIN --> FH MAIN --> AI UM --> DB CM --> DB FH --> DB FH --> FS AI --> DB MAIN --> CONFIG MAIN --> LOGGER ``` ### 服务器启动流程 ```mermaid flowchart TD START([服务器启动]) --> LOAD_CONFIG[加载配置文件] LOAD_CONFIG --> INIT_LOG[初始化日志系统] INIT_LOG --> INIT_DB[初始化数据库] INIT_DB --> CREATE_TABLES[创建数据表] CREATE_TABLES --> INIT_MANAGERS[初始化管理器组件] INIT_MANAGERS --> BIND_SOCKET[绑定Socket端口] BIND_SOCKET --> START_LISTEN[开始监听连接] START_LISTEN --> ACCEPT_LOOP[接受客户端连接循环] ACCEPT_LOOP --> NEW_CLIENT{新客户端连接?} NEW_CLIENT -->|是| CREATE_THREAD[创建处理线程] NEW_CLIENT -->|否| CHECK_STOP{收到停止信号?} CREATE_THREAD --> HANDLE_CLIENT[处理客户端请求] HANDLE_CLIENT --> ACCEPT_LOOP CHECK_STOP -->|否| ACCEPT_LOOP CHECK_STOP -->|是| CLEANUP[清理资源] CLEANUP --> STOP([服务器停止]) ``` ## 🔧 核心模块 ### 主服务器 (server/core/server.py) #### ChatRoomServer类 ```python class ChatRoomServer: """聊天室服务器主类""" def __init__(self, host: str = "localhost", port: int = 8888): """ 初始化服务器 Args: host: 服务器监听地址 port: 服务器监听端口 """ ``` **主要方法**: - `start()`: 启动服务器 - `stop()`: 停止服务器 - `handle_client(client_socket, address)`: 处理客户端连接 - `broadcast_message(message, exclude_client=None)`: 广播消息 - `remove_client(client_socket)`: 移除客户端连接 **配置参数**: ```yaml server: host: "localhost" port: 8888 max_connections: 100 timeout: 30 ``` ### 用户管理器 (server/core/user_manager.py) #### UserManager类 负责用户注册、登录、会话管理等功能。 **核心功能**: 1. **用户注册** ```python def register_user(self, username: str, password: str) -> Tuple[bool, str]: """ 注册新用户 Args: username: 用户名(3-20字符,字母数字下划线) password: 密码(6-50字符) Returns: (成功标志, 消息) """ ``` 2. **用户登录** ```python def login_user(self, username: str, password: str) -> Tuple[bool, str, Optional[dict]]: """ 用户登录验证 Args: username: 用户名 password: 密码 Returns: (成功标志, 消息, 用户信息) """ ``` 3. **会话管理** ```python def create_session(self, user_id: int, client_socket) -> str: """创建用户会话""" def get_session(self, session_token: str) -> Optional[dict]: """获取会话信息""" def remove_session(self, session_token: str) -> bool: """移除会话""" ``` 4. **在线状态管理** ```python def set_user_online(self, user_id: int, client_socket) -> None: """设置用户在线状态""" def set_user_offline(self, user_id: int) -> None: """设置用户离线状态""" def get_online_users(self) -> List[dict]: """获取在线用户列表""" ``` ### 聊天管理器 (server/core/chat_manager.py) #### ChatManager类 负责聊天组管理、消息处理、历史记录等功能。 **核心功能**: 1. **聊天组管理** ```python def create_chat_group(self, name: str, creator_id: int, members: List[int] = None) -> Tuple[bool, str]: """创建聊天组""" def join_chat_group(self, group_name: str, user_id: int) -> Tuple[bool, str]: """加入聊天组""" def enter_chat_group(self, group_name: str, user_id: int) -> Tuple[bool, str]: """进入聊天组""" ``` 2. **消息处理** ```python def send_message(self, group_id: int, user_id: int, content: str, message_type: str = "text") -> bool: """发送消息到聊天组""" def broadcast_to_group(self, group_id: int, message: dict, exclude_user: int = None) -> None: """向聊天组广播消息""" ``` 3. **历史消息** ```python def get_chat_history(self, group_id: int, limit: int = 50, offset: int = 0) -> List[dict]: """获取聊天历史""" def search_messages(self, group_id: int, keyword: str, limit: int = 20) -> List[dict]: """搜索消息""" ``` ### 文件处理器 (server/core/file_handler.py) #### FileHandler类 负责文件上传、下载、存储管理等功能。 **核心功能**: 1. **文件上传** ```python def handle_file_upload(self, user_id: int, group_id: int, file_data: bytes, filename: str, file_size: int) -> Tuple[bool, str]: """处理文件上传""" ``` 2. **文件下载** ```python def handle_file_download(self, user_id: int, file_id: str) -> Tuple[bool, str, bytes]: """处理文件下载""" ``` 3. **文件管理** ```python def list_group_files(self, group_id: int) -> List[dict]: """列出聊天组文件""" def delete_file(self, file_id: str, user_id: int) -> Tuple[bool, str]: """删除文件""" ``` **文件存储结构**: ``` server/data/files/ ├── uploads/ │ ├── 2025/ │ │ ├── 06/ │ │ │ ├── 16/ │ │ │ │ ├── {file_id}_{original_name} ``` **配置参数**: ```yaml file_transfer: max_file_size: 10485760 # 10MB allowed_types: [".txt", ".pdf", ".jpg", ".png", ".doc", ".docx"] upload_dir: "server/data/files/uploads" ``` ### AI处理器 (server/ai/ai_handler.py) #### AIHandler类 负责智谱AI集成、智能回复等功能。 **核心功能**: 1. **AI回复判断** ```python def should_respond_to_message(self, message: str, group_id: int, user_id: int) -> bool: """判断是否需要AI回复""" ``` 2. **生成AI回复** ```python def generate_ai_response(self, message: str, context: dict) -> str: """生成AI回复""" ``` 3. **上下文管理** ```python def update_conversation_context(self, user_id: int, group_id: int, message: str) -> None: """更新对话上下文""" ``` **AI配置**: ```yaml ai: enabled: true api_key: "your-zhipu-ai-api-key" model: "glm-4-flash" max_tokens: 1000 temperature: 0.7 context_window: 10 # 保留最近10条消息作为上下文 ``` ## 🗄️ 数据库设计 ### 数据表结构 #### users表 - 用户信息 ```sql CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL, password_hash TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_login TIMESTAMP, is_active BOOLEAN DEFAULT 1 ); ``` #### chat_groups表 - 聊天组信息 ```sql CREATE TABLE chat_groups ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT UNIQUE NOT NULL, creator_id INTEGER NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, is_public BOOLEAN DEFAULT 1, FOREIGN KEY (creator_id) REFERENCES users (id) ); ``` #### group_members表 - 聊天组成员 ```sql CREATE TABLE group_members ( id INTEGER PRIMARY KEY AUTOINCREMENT, group_id INTEGER NOT NULL, user_id INTEGER NOT NULL, joined_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, role TEXT DEFAULT 'member', FOREIGN KEY (group_id) REFERENCES chat_groups (id), FOREIGN KEY (user_id) REFERENCES users (id), UNIQUE(group_id, user_id) ); ``` #### messages表 - 消息记录 ```sql CREATE TABLE messages ( id INTEGER PRIMARY KEY AUTOINCREMENT, group_id INTEGER NOT NULL, user_id INTEGER NOT NULL, content TEXT NOT NULL, message_type TEXT DEFAULT 'text', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (group_id) REFERENCES chat_groups (id), FOREIGN KEY (user_id) REFERENCES users (id) ); ``` #### files表 - 文件信息 ```sql CREATE TABLE files ( id INTEGER PRIMARY KEY AUTOINCREMENT, file_id TEXT UNIQUE NOT NULL, group_id INTEGER NOT NULL, uploader_id INTEGER NOT NULL, original_filename TEXT NOT NULL, stored_filename TEXT NOT NULL, file_size INTEGER NOT NULL, file_type TEXT NOT NULL, upload_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (group_id) REFERENCES chat_groups (id), FOREIGN KEY (uploader_id) REFERENCES users (id) ); ``` ### 数据库操作 #### 连接管理 (server/database/connection.py) ```python class DatabaseManager: """数据库管理器""" def __init__(self, db_path: str): """初始化数据库连接""" def get_connection(self) -> sqlite3.Connection: """获取数据库连接""" def execute_query(self, query: str, params: tuple = ()) -> List[dict]: """执行查询""" def execute_update(self, query: str, params: tuple = ()) -> int: """执行更新""" ``` ## 🔧 配置管理 ### 服务器配置文件 (config/server_config.yaml) ```yaml # 服务器基础配置 server: host: "localhost" port: 8888 max_connections: 100 timeout: 30 debug: false # 数据库配置 database: path: "server/data/chatroom.db" backup_interval: 3600 # 备份间隔(秒) max_backup_files: 10 # 文件传输配置 file_transfer: enabled: true max_file_size: 10485760 # 10MB allowed_types: [".txt", ".pdf", ".jpg", ".png", ".doc", ".docx", ".zip"] upload_dir: "server/data/files/uploads" download_dir: "server/data/files/downloads" # AI功能配置 ai: enabled: false api_key: "" model: "glm-4-flash" base_url: "https://open.bigmodel.cn/api/paas/v4/" max_tokens: 1000 temperature: 0.7 context_window: 10 # 日志配置 logging: level: "INFO" file: "logs/server/server.log" max_size: 10485760 # 10MB backup_count: 5 categories: database: level: "INFO" file: "logs/server/database.log" ai: level: "INFO" file: "logs/server/ai.log" performance: level: "WARNING" file: "logs/server/performance.log" # 安全配置 security: password_min_length: 6 password_max_length: 50 username_min_length: 3 username_max_length: 20 session_timeout: 3600 # 会话超时(秒) max_login_attempts: 5 ``` ## 🚀 启动和部署 ### 启动服务器 ```bash # 基本启动 python -m server.main # 指定主机和端口 python -m server.main --host 0.0.0.0 --port 9999 # 启用调试模式 python -m server.main --debug # 使用配置文件 python -m server.main --config config/production.yaml ``` ### 命令行参数 - `--host`: 服务器监听地址(默认: localhost) - `--port`: 服务器监听端口(默认: 8888) - `--debug`: 启用调试模式 - `--config`: 指定配置文件路径 ### 环境变量 ```bash export CHATROOM_HOST=0.0.0.0 export CHATROOM_PORT=8888 export CHATROOM_DEBUG=true export ZHIPU_AI_API_KEY=your-api-key ``` ## 📊 监控和维护 ### 日志管理 服务器会生成以下日志文件: - `logs/server/server.log`: 主服务器日志 - `logs/server/database.log`: 数据库操作日志 - `logs/server/ai.log`: AI功能日志 - `logs/server/performance.log`: 性能监控日志 ### 性能监控 ```python # 查看服务器状态 from server.core.server import ChatRoomServer server = ChatRoomServer() print(f"活跃连接数: {server.get_active_connections()}") print(f"总消息数: {server.get_total_messages()}") ``` ### 数据库维护 ```bash # 数据库备份 python -c "from server.database.connection import backup_database; backup_database()" # 数据库清理 python -c "from server.database.connection import cleanup_old_data; cleanup_old_data()" ``` 这个服务器端文档提供了完整的服务器架构、API接口、配置管理和部署指南,帮助开发者理解和维护Chat-Room服务器端系统。