栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

《ZLToolKit源码学习笔记》(18)网络模块之Buffer缓存

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

《ZLToolKit源码学习笔记》(18)网络模块之Buffer缓存

    系列文章目录

《ZLToolKit源码学习笔记》(1)VS2019源码编译

《ZLToolKit源码学习笔记》(2)工具模块之日志功能分析

《ZLToolKit源码学习笔记》(3)工具模块之终端命令解析

《ZLToolKit源码学习笔记》(4)工具模块之消息广播器

《ZLToolKit源码学习笔记》(5)工具模块之资源池

《ZLToolKit源码学习笔记》(6)线程模块之整体框架概述

《ZLToolKit源码学习笔记》(7)线程模块之线程池组件:任务队列与线程组

《ZLToolKit源码学习笔记》(8)线程模块之线程负载计算器

《ZLToolKit源码学习笔记》(9)线程模块之任务执行器

《ZLToolKit源码学习笔记》(10)线程模块之线程池

《ZLToolKit源码学习笔记》(11)线程模块之工作线程池WorkThreadPool

《ZLToolKit源码学习笔记》(12)事件轮询模块之整体框架概述

《ZLToolKit源码学习笔记》(13)事件轮询模块之管道的简单封装

《ZLToolKit源码学习笔记》(14)事件轮询模块之定时器

《ZLToolKit源码学习笔记》(15)事件轮询模块之事件轮询器EventPoller

《ZLToolKit源码学习笔记》(16)网络模块之整体框架概述

《ZLToolKit源码学习笔记》(17)网络模块之基础接口封装类SockUtil

《ZLToolKit源码学习笔记》(18)网络模块之Buffer缓存(本文)


前言

对原始数据char* data进行封装,提供不同的数据访问方式,用于TCP与UDP的数据收发。


目录

    系列文章目录

前言

一、概述


一、概述

 Buffer:缓存抽象基类。有两个虚函数,data和size,前者获取数据指针,后者获取数据长度,派生类需要实现这两个函数。仅通过data拿到char*时,不要直接就访问数据,因为数据可能是二进制的(不能以判断结尾)。std::string是可以存储二进制数据的,初始化时需要使用string(char*,int count),指定长度后不会以结束。

BufferOffset:基于原始数据进行偏移,截取指定长度的数据。从代码中的使用来看,由于offset和len都用的默认值,所以该类等价于直接使用std::string。

BufferOffset(C data, size_t offset = 0, size_t len = 0);

typedef BufferOffset BufferString;

BufferRaw:单例类,通过create静态函数返回一个自身的智能指针对象。

BufferLikeString:类似std::string,主要是为了提高内存使用率,避免频繁申请内存。但感觉这个类没啥作用,直接使用std::string完全可以。理解该类主要看下三个成员变量:

size_t _erase_head;//原始数据中,有效数据距离开始位置的距离(开头无效数据的长度)
size_t _erase_tail;//原始数据中,有效数据距离末尾位置的距离(末尾无效数据的长度)
string _str;//原始数据

BufferSock:将Buffer和网络通信地址信息sockaddr关联起来。

BufferList:是BufferSock的友元类。接受一个Buffer的list,并提供了发送list中数据的send接口。

BufferList(List > &list, SendResult cb = nullptr);

ssize_t send(int fd, int flags, bool udp);

 send在发送UDP数据时,Buffer的实例化对象只能是BufferSock,因为会用到BufferSock中的sockaddr信息。发送TCP数据的话,则不限制具体的类型,因为用到的fd之前已经connect了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/691806.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号