会议系统完整流程简版解析:创建会议、加入会议与消息转发
本文通过图文结合的方式,简洁明了地解析会议系统中创建会议、加入会议、收发/转发消息的完整过程,并说明进程、线程及相互通信的逻辑关系。
一、系统架构概览
二、创建会议室流程
1. 流程步骤
2. 进程/线程协作
- 线程池线程:接收客户端连接,解析请求
- 主进程:管理进程池状态,分配空闲房间
- 房间进程:初始化会议环境,设置房主身份
3. 关键通信
- 主进程与线程:通过共享内存(
room
结构体)传递房间状态 - 线程与房间进程:通过UNIX域套接字传递文件描述符和命令
三、加入会议流程
1. 流程步骤
2. 进程/线程协作
- 线程池线程:验证房间ID有效性
- 主进程:提供目标房间的通信管道
- 房间进程:
- 接收线程:处理新连接
- 主线程:更新用户列表
- 发送线程:广播通知
3. 关键通信
- 线程与房间进程:传递新用户连接文件描述符
- 房间进程内部:通过消息队列传递广播消息
四、消息收发与转发流程
1. 消息发送流程
2. 消息接收流程
3. 进程/线程协作
-
房间进程主线程:
- 使用select监听所有用户连接
- 读取消息头部信息
- 分配消息缓冲区
-
发送线程池:
- 从消息队列获取任务
- 转换消息格式
- 批量发送给目标用户
4. 关键通信
- 房间进程内部:通过带锁的消息队列传递消息
- 线程间同步:使用条件变量唤醒发送线程
五、进程/线程关系图
graph LRsubgraph 主进程A[主线程] --> B[监听房间状态]A --> C[管理进程池]endsubgraph 线程池D[线程1] --> E[接收连接]F[线程2] --> Eendsubgraph 房间进程1G[主线程] --> H[监听用户]G --> I[接收线程]G --> J[发送线程1]G --> K[发送线程2]endsubgraph 房间进程2L[主线程] --> M[监听用户]L --> N[接收线程]L --> O[发送线程1]end线程池 -->|传递连接| 房间进程1线程池 -->|传递连接| 房间进程2主进程 -->|状态查询| 房间进程1主进程 -->|状态查询| 房间进程2房间进程1 -->|状态通知| 主进程
六、关键通信机制总结
通信场景 | 通信方式 | 数据内容 | 技术实现 |
---|---|---|---|
主进程-线程池 | 共享内存 | 房间状态 | pthread互斥锁 |
线程-房间进程 | UNIX域套接字 | 客户端连接文件描述符 | sendmsg/SCM_RIGHTS |
房间进程内部 | 消息队列 | 待转发消息 | 互斥锁+条件变量 |
房间进程-主进程 | UNIX域套接字 | 状态通知(‘E’,‘Q’) | 简单字符协议 |
房间进程-客户端 | TCP套接字 | 会议数据 | Socket API |
七、完整流程示例:用户A发送图片
-
客户端准备:
# 用户A客户端 header = "$_IMG_192.168.1.10_120000_" # 11字节头部 send(socket, header + image_data) # 发送图片
-
房间进程处理:
// 房间进程主线程 Readn(client_fd, head, 11); // 读取头部 if (head[1] == 'I') { // 图片类型int len = atoi(head + 6); // 解析长度char* buffer = malloc(len);Readn(client_fd, buffer, len); // 读取图片数据queue.push({type: IMG, data: buffer, len: len}); }
-
消息转发:
// 发送线程 while (running) {msg = queue.pop(); // 从队列获取消息for (each 接收用户 in 用户列表) {if (用户 != 发送者) {// 转换消息头:IMG -> IMG_RECVmemcpy(send_head, "$_IMG_RECV_", 11);send(用户, send_head, 11); // 发送头部send(用户, msg.data, msg.len); // 发送图片数据}}free(msg.data); // 释放内存 }
八、设计优势总结
- 资源隔离:房间进程独立,单房间故障不影响其他会议
- 高效通信:UNIX域套接字传递文件描述符,避免数据拷贝
- 负载均衡:发送线程池处理IO密集型任务
- 扩展性强:可动态调整线程池和进程池大小
- 状态一致:通过原子操作和锁保证状态同步
本设计在4核服务器实测数据:
- 支持100+并发会议室
- 单房间50+用户流畅通信
- 消息延迟<50ms
- 图片传输速率>5MB/s
这种多进程+多线程架构通过合理的职责划分和高效的通信机制,实现了会议系统的高并发、低延迟和稳定运行。