网络库的设计与实现

本文详细介绍了基于C++11的网络库设计与实现,包括一个迷你的服务器示例,库的功能设计,如异步、同步IO,zero-copy机制等,并对比了与ASIO的区别,探讨了未来的演化方向。
摘要由CSDN通过智能技术生成

前言

距离第一次发布iocpframework已经三年多了,这期间这款基于windows的网络库经过多次的修改,已经和第一版有非常大的区别了,但是整体思想架构并没有改变,这得益于当初对下载调度器的认识--模块应该是可替换的,这也是后话了。

 

在阅读本文的时候,希望你能有以下的基础:

  • 熟悉C++11 ,auto、decltype、lambda、type_traits、move等
  • 熟悉Windows的网络编程、IOCP模型(IOCP仅仅是个异步队列 blocking queue,当然不止一个队列)

如果你符合以下描述,那么恭喜你,本文就是为你而写的:

  • 追求自由,热爱自由
  • 对网络proactor IO模型细枝末节摸棱两可
  • 对IOCP机制感到非常模糊及细节难以把握
  • 对C++充满热爱与激情

如果您具有以下特征之一,那么本文可能会给你带来不适,请谅解:

  • 披着C++外衣的Cer
  • 反模板联盟
  • 反感自造轮子

iocpframework的github地址:https://github.com/chenyu2202863/iocpframework/

换句话说,我所走的弯路,你一样得走(哈哈,被坑了),我所路过的捷径,也希望会成为你的捷径。祝你好运。。需要C++11编译期支持,至少VS2012 CTP补丁才能编译

 

一个迷你的服务器

image

设置好监听端口,启动。等待accept事件,针对session投递读请求,等待读事件,返回写数据。麻雀虽小五脏俱全,再来看看其中涉及到的设计思考及实现细节。

 

网络库应该提供的功能:

  1. 3个半事件,详情请参考陈硕的《网络编程本质论
  2. 可扩展的内存分配方式
  3. 对网络错误处理
  4. 异步、同步IO

网络库避免限制的决策:

  1. 对session集中式管理
  2. 对接收缓冲区与发送缓冲区的强制
  3. 需要做到协议无关

正如《UNIX编程艺术》所说:提供机制,而不是策略

与第一版的变化:

  1. 性能大幅度提高
  2. 接口更加灵活
  3. 增加socket pool
  4. 增加zero copy机制
  5. 增加timewheel
  6. 不再支持Win XP

 

库结构

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值