# 基于epoll+线程池的即时通讯系统 **Repository Path**: Xiao____liu/EpollThreadPoollInstantMessaging ## Basic Information - **Project Name**: 基于epoll+线程池的即时通讯系统 - **Description**: 通过epol+线程池实现服务器与多个客户端之间的通信。 - **Primary Language**: C - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-13 - **Last Updated**: 2025-11-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## **开发环境与技术栈** 本项目的开发与运行环境及核心技术栈如下: - **操作系统**:Linux(提供稳定的网络编程接口和多线程支持) - **开发工具**:VS Code(轻量高效的代码编辑器,支持多语言开发与调试) - **网络模型**:epoll(Linux 下高效的 I/O 多路复用机制,用于处理大量客户端连接) - **数据库**:sqlite3(轻量级嵌入式数据库,用于存储用户信息及相关数据) - **网络协议**:TCP(提供可靠的字节流传输,保证消息与文件传输的完整性) - **数据结构**:双向链表(用于消息与文件数据的转发管理) - **并发处理**:线程池(提高服务器对多客户端请求的处理效率) ## **项目功能设计** ### **客户端功能** 客户端作为用户直接操作的交互界面,实现了丰富的通信与管理功能: 1. **用户管理模块** - 注册:新用户可通过填写用户名、密码等信息完成账号注册 - 登录:已注册用户输入账号密码进行身份验证后登录系统 2. **通信功能模块** - 群聊:支持向所有在线用户发送公共消息,实现多人实时交流 - 私聊:可选择特定在线用户进行一对一私密对话 - 查看在线用户:实时获取当前系统中的在线用户列表 - 查看历史记录:查询本地历史记录 3. **文件传输**:支持客户端之间进行文件传递,实现文档、图片等数据的共享 4. **本地记录管理**:可查看本地存储的历史聊天记录,方便用户回溯过往对话 5. **权限管理**:管理员账号拥有特殊权限,可对违规用户执行禁言或解禁操作 ### **服务端功能** 服务端作为系统的核心枢纽,承担着连接管理、数据转发与数据存储等关键职责: 1. **高并发处理**:采用 epoll 实现 I/O 多路复用,结合线程池技术,高效处理大量客户端的并发连接与请求,避免频繁创建销毁线程带来的性能开销 2. **数据转发机制**:基于双向链表数据结构管理消息与文件数据,实现客户端之间的高效数据转发,确保信息传递的有序性与完整性 3. **密码哈希存储:**服务器会将用户密码加盐后存储,防止出现盗数据库风险。 4. **离线缓存:**服务器会存储目标未在线的用户,等其上线会主动通知离线时的消息。 5. **用户信息管理**:通过 sqlite3 数据库存储所有用户的账号、密码等信息,实现用户身份验证、权限控制等功能的数据支持 6. **连接维护**:实时监控客户端连接状态,处理异常断开等情况,保证系统稳定性 ## **核心技术实现要点** ### **1. epoll 与线程池的结合** 服务端通过 epoll 创建事件驱动的 I/O 模型,将客户端连接、数据可读等事件注册到 epoll 实例中,通过`epoll_wait`高效监听事件发生。当有事件触发时,将任务分配给线程池中的空闲线程处理,实现 "主线程监听,工作线程处理" 的模式,有效提升并发处理能力。 ### **2. 双向链表在数据转发中的应用** 系统使用双向链表存储待转发的消息与文件数据,每个节点包含发送者、接收者、数据内容、数据类型等信息。服务端通过遍历链表实现数据的精准转发,同时支持高效的节点插入与删除操作,适应实时通信的动态性需求。 ### **3. sqlite3 数据库的用户管理** 服务器端通过 sqlite3 创建用户表,存储用户名(主键)、加密后的密码、用户权限(普通用户 / 管理员)等信息。在用户注册、登录等操作时,通过 SQL 语句进行数据查询与更新,确保用户信息的安全存储与高效访问。