当前位置: 首页 > news >正文

C++高性能服务器框架----序列化模块

详细内容:日志模块,使用宏实现流式输出,支持同步日志与异步日志、自定义日志格式、日志级别、多日志分离等功能。线程模块,封装pthread相关方法,封装常用的锁包括(信号量,读写锁,自旋锁等)。IO协程调度模块,基于ucontext_t实现非对称协程模型,以线程池的方式实现多线程,多协程协同调度,同时依赖epoll实现了事件监听机制。定时器模块,使用最小堆管理定时器,配合IO协程调度模块可以完成基于协程的定时任务调度。hook模块,将同步的系统调用封装成异步操作(accept, recv, send等),配合IO协程调度能够极大的提升服务器性能。Http模块,封装了sokcet常用方法,支持http协议解析,客户端实现连接池发送请求,服务器端实现servlet模式处理客户端请求,支持单Reator多线程,多Reator多线程模式的服务器。

序列化模块
  • 序列化模块的底层存储是固定大小的块,以链表形式组织。每次写入数据时,将数据写入到链表最后一个块中,如果最后一个块不足以容纳数据,则分配一个新的块并添加到链表结尾,再写入数据。ByteArray会记录当前的操作位置,每次写入数据时,该操作位置按写入大小往后偏移,如果要读取数据,则必须调用setPosition重新设置当前的操作位置。
  • 这样有个好处,不用一开始就开一个很大的空间去存储数据。
1. 主要功能
  • 支持序列化固定长度的有符号/无符号8位、16位、32位、64位整数
  • 支持序列化不固定长度的有符号/无符号32位、64位整数(使用zigzag算法进行压缩)
  • 支持序列化float、double类型
  • 支持序列化string和(length+string)的格式
  • 支持将序列化内容输出到文件
  • 支持大小端转换
2. 功能演示

代码语言:javascript

AI代码解释

std::vector<int32_t> res; johnsonli::ByteArray::ptr ba(new johnsonli::ByteArray(base_len)); for(int i = 0; i<len; ++i) { res.push_back(rand()); } for(auto &it : res) { ba->writeFint32(it); } ba->setPosition(0); // 读之前偏移量要设置为0 for(auto it : res) { int32_t val = ba->readFint32(); DO_ASSERT(it == val); } DO_ASSERT(ba->getReadSize() == 0); LOG_INFO(g_logger) << "writeFint32/readFint32" " (int32_t) len=" << len << " base_len=" << base_len << " size=" << ba->getSize();
3. 模块介绍
3.1 ByteArray
  • 序列化类。封装一个内存块,使用链表将内存块连接,实现动态扩容

代码语言:javascript

AI代码解释

struct Node { Node(size_t s); //构造指定大小的内存块 Node(); ~Node(); char* ptr; //内存块地址指针 Node* next; //下一个内存块地址 size_t size; //内存块大小 };
  • 主要支持以下方法

代码语言:javascript

AI代码解释

void writeFint8 (int8_t value); // 写入固定长度int8_t类型的数据 void writeFuint8 (uint8_t value); // 写入固定长度uint8_t类型的数据 // ... 16、32、64字节 void writeInt32 (int32_t value); // 压缩写入int32_t void writeUint32 (uint32_t value); // 压缩写入uint32_t // 64字节 void writeFloat (float value); void writeDouble(float value); void writeStringF16(const std::string& value); // 写入std::string类型的数据,用uint16_t作为长度类型 void writeStringWithoutLength(const std::string& value); // 不写长度 // ... void readFint8 (int8_t value); // 读取固定长度int8_t类型的数据 void readFuint8 (uint8_t value); // 读取固定长度uint8_t类型的数据 // ... 16、32、64字节 void readInt32 (int32_t value); // 读取压缩的int32_t void readUint32 (uint32_t value); // 读取压缩的uint32_t // 64字节 ...


http://www.jsqmd.com/news/813189/

相关文章:

  • 2026大金空调配件购买哪家好?深圳大金空调售后维修服务商家推荐 - 栗子测评
  • 轻量级中文大语言模型BlossomLM:架构、训练与部署实战
  • 电源管理IC的精准化革命:从通用解到场景解的设计哲学与选型实战
  • Vue 2 路由系统深度解析:原理与实现机制
  • HTML怎么构建课程学习仪表盘_HTML进度环+任务列表【教程】
  • 基于MCP协议构建Next.js+Prisma项目智能助手,实现AI驱动的开发增强
  • InsightFace_Pytorch与Caffe模型转换:权重提取与迁移学习完整指南
  • 数据足迹缩减技术:存储优化与成本控制实践
  • Webiny全栈无头CMS与云原生应用开发实战指南
  • GPU渲染管线ROP优化:早期终止与Quad合并技术
  • 哔哩下载姬:3步解锁B站视频下载新体验,告别在线观看限制
  • Bootstrap和OpenLayers结合开发的示例
  • 终极指南:fmt库Unicode支持详解——跨平台字符处理的完美实践
  • Kubeshark性能监控终极指南:12个关键指标与Grafana可视化配置详解
  • 高性能零依赖Vue3跑马灯组件:企业级动态内容展示解决方案
  • 如何在Windows 11上快速搭建Android应用生态:WSA Toolbox终极指南
  • 别再手动查日志了!用Grafana实现DeepSeek推理QPS、P99延迟、OOM异常的秒级告警闭环
  • A2Perf强化学习基准测试框架解析与应用实践
  • 基于钻石NV色心的量子磁传感器:原理、设计与工程实现
  • 构建健壮任务恢复系统:从检查点到分布式架构的实践指南
  • antigravityignore:强化.gitignore规则,守护Git仓库整洁与安全
  • PixArt-Sigma实战案例:构建企业级AI图像生成平台的完整指南
  • 如何实现跨平台YouTube Shorts自动化:MoneyPrinter终极指南
  • 终极指南:如何为nDreamBerd完美编程语言提交高质量bug报告 [特殊字符]
  • 千簧管供应厂家哪家靠谱?2026年优质干簧开关生产厂家盘点与推荐:圆锋电子领衔 - 栗子测评
  • Flipper Zero红外遥控革新:XRemote应用实现物理按键直控与智能学习
  • 如何快速掌握Spring Cloud API网关:从Zuul到Gateway的终极实战指南
  • 基于RFID与Mesh网络的工程设备智能追踪系统设计与实践
  • 如何利用boardgame.io状态快照功能轻松实现游戏回放:完整指南
  • OR-Tools性能分析工具:识别求解瓶颈的10个高级技术