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









