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

做雷达干扰的网站中国女排赛程时间最新消息

做雷达干扰的网站,中国女排赛程时间最新消息,网站开发过程记录册,廊坊网站排名方案存储系统03——数据缓冲evBuffer 数据缓冲evBuffer分段存储零拷贝线程安全 evbuffer 实例——存储系统事件触发 数据缓冲evBuffer evbuffer 是 Libevent 提供的一个高效内存缓冲区管理工具,用于存储和操作数据。它类似于一个动态增长的字节缓冲区,支持多…

存储系统03——数据缓冲evBuffer

  • 数据缓冲evBuffer
    • 分段存储
    • 零拷贝
    • 线程安全
  • evbuffer 实例——存储系统事件触发

数据缓冲evBuffer

evbuffer 是 Libevent 提供的一个高效内存缓冲区管理工具,用于存储和操作数据。它类似于一个动态增长的字节缓冲区,支持多种操作,如添加、移除、读取和写入数据;在多线程环境中,evbuffer 的操作是线程安全的。

分段存储

evbuffer 内部使用链表结构存储数据,可以根据需要动态扩展和收缩内存空间;这使得它能够高效地处理不同大小的文件,而无需预先分配固定大小的缓冲区

避免了直接使用套接字传输时,需要的手动管理缓冲区、大文件手动分段

零拷贝

evbuffer 提供了零拷贝操作,如evbuffer_add_file(),可以直接将文件内容添加到缓冲区,而无需先将文件内容读取到内存中,这样可以显著减少内存占用和拷贝操作,提高传输效率。

避免了直接使用套接字传输时,需要将文件内容先读取到内存缓冲区中,再写入套接字;这会增加不必要的内存拷贝操作,降低传输效率。

线程安全

evbuffer 的操作是线程安全的。

evbuffer 实例——存储系统事件触发

用户在浏览器中触发了某些功能后,事件触发并调用回调函数GenHandler(),根据读取到的不同URL请求,回调函数执行对应的业务;
以Download为例:

static void GenHandler(struct evhttp_request *req, void *arg)
{std::string path = evhttp_uri_get_path(evhttp_request_get_evhttp_uri(req));path = UrlDecode(path);// 根据请求中的内容判断是什么请求// 这里是下载请求if (path.find("/download/") != std::string::npos){Download(req, arg);}else{evhttp_send_reply(req, HTTP_NOTFOUND, "Not Found", NULL);}
}

当读取到的业务为Download时,evbuffer 被用于处理 HTTP 文件下载请求;
下载代码逻辑为:

  1. 从 HTTP 请求中提取资源路径,并进行 URL 解码
// 1. 获取客户端请求的资源路径path   req.path
std::string resource_path = evhttp_uri_get_path(evhttp_request_get_evhttp_uri(req)); // 从请求的 URI 中提取路径部分           
resource_path = UrlDecode(resource_path); // 对路径进行 URL 解码
  1. 根据资源路径查询文件的存储信息
// 2. 根据资源路径,获取StorageInfo
StorageInfo info;
data_->GetOneByURL(resource_path, &info); // 根据资源路径获取文件的存储信息std::string download_path = info.storage_path_; // 获取文件的实际存储路径
  1. 将文件内容添加到 HTTP 响应中
// 3. 读取文件数据,放入 rsp.body 中
evbuffer *outbuf = evhttp_request_get_output_buffer(req); // 获取 HTTP 请求的输出缓冲区 evbuffer
int fd = open(download_path.c_str(), O_RDONLY);
// 使用零拷贝机制将文件放入输出缓冲区
evbuffer_add_file(outbuf, fd, 0, fu.FileSize()) // 将文件内容添加到输出缓冲区 outbuf
  1. 设置相应的 HTTP 头部字段,回传文件
// 4. 设置响应头部字段: ETag, Accept-Ranges: bytes
evhttp_add_header(req->output_headers, "Accept-Ranges", "bytes");
evhttp_add_header(req->output_headers, "ETag", GetETag(info).c_str());
evhttp_add_header(req->output_headers, "Content-Type", "application/octet-stream");evhttp_send_reply(req, HTTP_OK, "Success", NULL);

文章转载自:

http://aX3Q8MmZ.hcwLq.cn
http://tX0ONVvb.hcwLq.cn
http://ts2ZjZIe.hcwLq.cn
http://nXp5YcAE.hcwLq.cn
http://QL7XCs5U.hcwLq.cn
http://vdNQuAZQ.hcwLq.cn
http://pk2eYeJg.hcwLq.cn
http://UMd8467i.hcwLq.cn
http://lVAzAWF2.hcwLq.cn
http://x4WsALod.hcwLq.cn
http://QmnMpCdj.hcwLq.cn
http://O9vq7b3U.hcwLq.cn
http://O1Rs0Yei.hcwLq.cn
http://CUYMuDw8.hcwLq.cn
http://703rQ0on.hcwLq.cn
http://pVlrRh3p.hcwLq.cn
http://f9OtTd6Y.hcwLq.cn
http://rRAF37W5.hcwLq.cn
http://scR1pUWi.hcwLq.cn
http://a7zU239i.hcwLq.cn
http://rTqvLwtW.hcwLq.cn
http://3LgDyYmy.hcwLq.cn
http://U9nNSFbo.hcwLq.cn
http://41pddU9S.hcwLq.cn
http://is0JZKIx.hcwLq.cn
http://UobJHZNA.hcwLq.cn
http://IR1w8PLu.hcwLq.cn
http://hnH34LAJ.hcwLq.cn
http://u7OsVhqF.hcwLq.cn
http://BE3K2N76.hcwLq.cn
http://www.dtcms.com/wzjs/724687.html

相关文章:

  • 深圳建网站好的公司专业的网站建设费用
  • 如果建立网站wordpress谁看了
  • 全网通网站wordpress 知乎
  • 做小型企业网站多少钱百度大数据分析
  • 徐州网站建设方案优化浙江台州网络设计网站
  • 内蒙古城乡建设厅网站资质公告网页游戏折扣
  • 绍兴市建设银行网站购买建立网站费怎么做会计凭证
  • wordpress 站长统计wordpress 封面图像
  • 青岛网站公司网站建设优化服务精英
  • 网站开发推广方案策划书白云区网站建设公司
  • 吴江区城乡建设管理局网站高德导航怎么看街景地图
  • 兰州网站搜索优化网站建设公开招标
  • 建站工具指北wordpress支持视频
  • ac域名的网站有啥不同电脑做的本地网站手机看
  • 网站建设公司 待遇企业平台网站建设
  • 公司网站申请网站建设需要ui吗
  • 雄安做网站要多少钱wordpress函数
  • 鞍山做网站或视频剪辑培训
  • 怎样做加入购物车的网站深圳网站策划
  • 杭州哪里做网站wordpress询价管理
  • 做网站 做手机app要学什么软件邢台开发区建设小学官方网站
  • 黄埔做网站的公国企央企招聘2022年
  • 网站备案号 英文昆明网站服务
  • 四川省和城乡建设厅网站深圳seo博客
  • 潍坊哪里做网站好化工厂网站建设
  • 蓬莱做网站案例seo发外链工具
  • dede 网站目录精通网站建设
  • 网站怎样做自适应分辨率大小网站开发花费
  • 从化手机网站建设网站建设制作心得团队
  • 知识网站有哪些html个人网页代码模板