首页 > 其他分享 >asio的buffer

asio的buffer

时间:2024-09-21 22:45:13浏览次数:10  
标签:asio const MutableBufferSequence buffer mutable buffers

ASIO的buffer理解

asio的buffer结构

任何网络库都有提供buffer的数据结构,这个就是收发数据的缓冲区。

asio提供了mutable_buffer 和 const_buffer这两个结构,他们都是一段连续的空间,首字节存储了后续数据的长度。mutable_buffer用于写服务,const_buffer用于读服务。但是这两个结构都没有直接的api可以调用。asio提出了MutableBufferSequence和ConstBufferSequence的概念,他们是由多个mutable_buffer和const_buffer组成的。我们可以理解为MutableBufferSequence的数据结构为vector<mutable_buffer>,结构如下

image-20240921222731672

如图所示每个vector存储的都是mutable_buffer的地址,这么复杂的数据结构交给用户使用显然是不合适的,因此asio提出了buffer函数,该函数接收多种形式的字节流,返回mutable_buffers_1 或者const_buffers_1结构的对象。const_buffers_1和mutable_buffers_1是mutable_buffer和const_buffer的适配器,提供了符合MutableBufferSequence和ConstBufferSequence概念的接口,所以他们可以作为asio的api函数的参数使用。

简单概括一下,我们可以用buffer()函数生成我们要用的缓存存储数据。
比如boost的发送接口send要求的参数为ConstBufferSequence类型,我们发送"hello world"字符串时,我们需要将”Hello Word转化为该类型”,最终buffer函数返回的就是可以传递给发送接口send的类型。

标签:asio,const,MutableBufferSequence,buffer,mutable,buffers
From: https://www.cnblogs.com/dwinternet/p/18424645

相关文章

  • MySQL数据库日志之WAL机制和Buffer Pool
    WAL机制(Write-Ahead-Logging)先磁盘之前先写入日志文件到磁盘,也就是redolog中的后台系统线程,每1秒进行一次对redologBuffer刷盘操作。标准的UndoLog这一步是靠WAL实现的,也就是要求Undo写入先于数据落盘。对于,undolog的WAL机制,只是相对于提交事务后的刷盘和......
  • 兼收并蓄 TypeScript - 进阶: ArrayBuffer
    源码https://github.com/webabcd/TypeScriptDemo作者webabcd兼收并蓄TypeScript-进阶:ArrayBuffer示例如下:advanced\arrayBuffer.ts{/***1、ArrayBuffer-内存之中的一段二进制数据,需要通过视图操作数据*2、TypedArray-视图,用于操作ArrayBuf......
  • Framebuffer core
    Framebuffercore,在Linux系统中,主要指的是与Framebuffer设备驱动相关的核心代码和功能。Framebuffer是Linux内核为显示设备提供的一套应用程序接口(API),它抽象了显示硬件的底层差异,使得开发者可以通过操作内存中的帧缓冲区来间接控制显示设备,从而实现图形的显示和渲染。Framebuffer......
  • Windows 下 EGL PBuffer 测试代码
    Windows 上使用glad加载浏览器的LibEGL.dll 和LibGLESV2.dll,测试 EGL 在Windows 上的实现,代码:1#include<stdio.h>23#include"include/glad/egl.h"4#include"include/glad/gles3.2.h"56#defineSTB_IMAGE_WRITE_IMPLEMENTATION......
  • SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffer
    SQLSTATE[HY000]:Generalerror:2014Cannotexecutequerieswhileotherunbufferedqueriesareactive.ConsiderusingPDOStatement::fetchAll().Alternatively,ifyourcodeisonlyevergoingtorunagainstmysql,youmayenablequerybufferingbysetting......
  • 章13——常用类——StringBuffer类
    基本介绍即StringBuffer是存在堆中的而非常量池中的。(value数组存放字符串内容)与String的对比StringBuffer:不用每次更新地址,但当数组空间不够时,会扩大并且更新地址。构造器StringBufferstringBuffer=newStringBuffer();StringBufferstringBu......
  • 【电气设计 - 电源】24V电源缓冲模块buffer module
    菲尼克斯缓冲模块2907913以下引用自菲尼克斯官网短期电源中断是靠QUINTBUFFER桥接,其为一种带SFB(选择性熔断技术)无需保养的电容型缓冲模块。系统也可在不稳定网络或长时间生故障的情况下运行,并在所有相关处理数据保存后断开。缓冲模块也可作为储能设备,用于驱动峰值负载和分......
  • ADC_DMA_双buffer传输
    ADC_DMA_双buffer传输线程A切换buffer地址开启ADC转换,并使用DMA传输等待获取DMA中断的信号量,获取到信号量,表示上一次DMA传输已完成将地址通过消息队列传输给线程Buint32_t*adc_value=NULL;/*USERCODEENDHeader_adc_dma_task_function*/voidadc_dma_task_func......
  • CString类的ReleaseBuffer的用处是什么
    用了好多年了,才发现这个问题,写个小程序测试了,终于搞明白了:CStringstr; str=_T("1234567890");TCHAR*p=str.GetBuffer(100); //TCHAR*p=str.GetBufferSetLength(100);_tcscpy(p,_T("12345678111111190"));str.ReleaseBuffer(); //测试str+="aaa"; m_......
  • FrameBuffer
    一、基本概念        FrameBuffer:可以译作"帧缓冲、帧缓存",有时简称为fbdrv。这是一种独立于硬件的抽象图形设备。是Linux为显示设备提供的一个接口,把显存抽象后的一种设备,允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作控制fb。        对于......