
【Rust投稿】从零实现消息中间件(4)-SERVER.CLIENT
发布日期:2021-05-20 06:54:50
浏览次数:17
分类:精选文章
本文共 948 字,大约阅读时间需要 3 分钟。
服务器端数据处理详解
概念概述
本文将深入探讨服务器端处理来自客户端连接数据的逻辑。涵盖数据接收、订阅与发布消息的处理、错误处理及资源释放等核心功能。
功能模块
1. 接收消息
服务器接收来自客户端的数据后,根据消息类型(Sub或Pub)进行不同的处理方式。
2. 记录订阅消息
当接收到Sub类型消息时,将其记录到全局订阅列表中,以便后续操作。
3. 发送发布消息
对于Pub类型消息,服务器将其发送给所有订阅的客户端。为了确保负载均衡,消息的分发采用随机机制。
4. 错误处理机制
在处理过程中出现错误时,服务器会采取以下措施:
- 删除相关订阅
- 关闭客户端连接
数据结构设计
1. 服务器主体逻辑
服务器核心逻辑主要涉及以下数据结构:
- srv:负责管理全局订阅列表。
- msg_sender:用于发送消息。通过Arc和Mutex保护数据一致性。
- ClientMessageSender:基于 TcpStream 的写半部分,实现消息发送功能。
2. 客户端连接管理
客户端连接的创建与管理过程包括:
- 创建 Client 实例及相关消息发送器。
- 启动并管理客户端任务。
代码实现要点
1. 连接处理逻辑
启动 client_task 函数时,基于 Tokio I/O 架线,处理读写流程。
2. 任务执行流程
任务的主要工作步骤包括:
- 数据读取与解析
- 消息处理分发
- 读取错误处理
错误处理细节
1. 错误处理流程
在读取过程中出现错误时,调用 process_error 方法:
- 删除所有相关订阅
- 关闭消息发送器
- 处理可能的异常
消息处理机制
1. 记录订阅
获取Sub消息后进行:
- 全局列表记录
- 本地连接保存
- 基于 SubArg 内存结构,确保数据一致性。
2. 发布消息处理
接收Pub消息时,执行以下步骤:
- 查找所有订阅
- 轮询负载均衡队列
- 单独发送消息
消息发送实现
1. 消息格式
消息以特定格式排列:
- MSG
\r\n \r\n
2. 实现过程
消息发送步骤包括:
- 写入各部分数据
- 调用.msg_sender进行写入
其他事项
- 代码完全可在 GitHub 查看
- 使用 tokio 架线模式
- 关注内存管理与资源释放
开发者可通过上述逻辑更深入理解服务器端消息处理流程,并进行相应优化和扩展。
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月30日 15时12分10秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
ubuntu 16.04 镜像下载
2019-03-15
CUDA9.1、cuDNN7在Ubuntu16.04上的安装
2019-03-15
微信小程序云开发:怎么删除云函数?已解决
2019-03-15
第一次被黑
2019-03-15
PyCharm配置anaconda环境
2019-03-15
SpringBoot与缓存(JSR-107、Spring缓存抽象)
2021-05-18
ERROR 总结
2021-05-18
查找最小值栈的O(1)
2021-05-18
淘宝天猫双十一养猫组队怎么踢人
2021-05-18
Java面试题整理,闭关在家37天“吃透”这份345页PDF,纯干货
2021-05-18
概念唱片Plastic Beach封面高清壁纸
2021-05-18
旅游后期效果Ography Lightroom预设
2021-05-18
vue项目报错集合
2021-05-18
图片链接
2021-05-18
LINUX-WIFI无线接入的一些东西
2021-05-18
word文档手写字母总会大写问题
2021-05-18
Redis中的key
2019-03-15