# 基于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 语句进行数据查询与更新,确保用户信息的安全存储与高效访问。