Boost库网络编程和异步IO(一)

boost::asio概要

boost::aiso主要用于跨平台网络开发,封装了底层常用的网络操作和同步、异步IO操作,可以很快速的设计开发出高并发网络服务程序。boost::asio使用主要基于两个概念:

  • IO服务

    boost::asio::io_service:封装了系统接口,具体实现上每个io_service都一个公有任务队列和多个私有任务队列,公有队列由各个线程共享,私有队列则是每个线程独享一个。

  • IO对象

    boost中IO对象包括网络、缓存操作等类型,常用的IO对象有:

    • boost::asio::ip::tcp::socket
    • boost::asio::ip::tcp::endpoint
    • boost::asio::ip::tcp::resolver
    • boost::asio::ip::tcp::acceptor
    • boost::asio::deadline_timer 定时器

    IO对象需要使用io_service作为构造函数第一个参数,列如处理网络连接时常用以下接口:

    #include <boost/system/error_code.hpp>
    #include <boost/aiso.hpp>   // 所需头文件引入
    boost::system::error_code ec;// 对象所依赖的服务定义:
    boost::asio::io_service m_ioService;
    m_ioService.run();// acceptor 接收器,监听连接请求
    boost::asio::ip::tcp::acceptor m_oAcceptor(boost::asio::io_service&);
    m_oAcceptor.open(boost::asio::ip::tcp::v4(),ec);
    // 设置端口复用
    m_oAcceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true),ec);
    m_oAcceptor.set_option(boost::asio::ip::tcp::no_delay(true),ec);
    m_oAcceptor.bind(boost::asio::ip::tcp::endpoint,ec);
    m_oAcceptor.listen(boost::asio::socket_base::max_connections, ec);
    m_oAcceptor.async_accept(tcp::socket&, accept_handler);// 创建一个socket连接
    boost::asio::ip::tcp::socket m_socket(m_ioService);
    boost::asio::ip::tcp::endpoint server_point(boost::asio::ip::address::from_string(SERVERADDR), SERVERPORT);
    m_sock.connect(server_point);
    

    可以将每一个io_service等同于一份系统资源,因此在实际使用时,可以合理的使用多个service处理网络请求。

Boost库网络编程相关推荐

  1. 8005.ros2 添加boost库asio编程

    ros2 添加boost库asio编程 ## boost 库 由vs2019编译,具体编译步骤参考 博客. ## 注意不能打开 message 打印信息,因为在ros2中这样会报错.add_defin ...

  2. [Boost基础]并发编程——asio网络库——定时器deadline_timer

    asio库基于操作系统提供的异步机制,采用前摄器设计模式(Proactor)实现了可移植的异步(或者同步)IO操作,而且并不要求使用多线程和锁定,有些的避免了多线程编程带来的诸多有害副作用(如条件竞争 ...

  3. Boost asio学习笔记之二—— 网络编程

    boost库中的网络编程的例子比较复杂,不太好理解,所以,从网上找了一个简单点的例子.网址如下:http://blog.chinaunix.net/u3/93184/showart_1846119.h ...

  4. Boost.Asio的网络编程

    简介 这篇笔记是boost::asio的概览, 主要说明了boost的进行CS结构编程的基本步骤. 在网络编程中, 又很多需要IO的操作. 一种是使用Linux的原生C语言API, Linux的核心编 ...

  5. muduo学习笔记:net部分之实现TCP网络编程库-Buffer

    文章目录 为什么采用non-blocking网络编程中应用层buffer是必需的? Buffer 设计 Buffer::readFd() 线程安全 Muduo Buffer 的数据结构 Muduo B ...

  6. muduo---C++网络编程库

    陈硕 muduo 参考资料 muduo源码剖析 Muduo是一个基于Reactor模式的现代C++网络库,它采用非阻塞IO模型,基于时间驱动和回调,原生支持多核多线程,适合编写Linux服务端多线程网 ...

  7. boost库中优秀的网络库asio

    文章目录 一.须知 二.ASIO 三.我们将从研究同步操作开始 四.当使用异步操作时,会发生不同的事件序列 五.Proactor模型 六.常用内容 七.C++ 建立本地网络服务器 (Boost.Asi ...

  8. 网络编程知识预备(5) ——libcurl库简介及其编程访问百度首页

    本文为学习笔记,整合课程内容以及下列文章: 其中,libcurl函数库常用字段解读部分: 参考博文:原文地址 作者:冬冬他哥哥 目录 Libcurl库简介 Libcurl等三方库的通用编译方法 三方库 ...

  9. Winsock网络编程头文件及库文件的设置

    Winsock是Windows下网络编程的规范.使用Winsock可以实现基于TCP或UDP的通信. 1 Winsock版本 Winsock主要包含两个版本,即Winsock1和Winsock2.Wi ...

最新文章

  1. linux下安装svn
  2. java 命名管道_利用Windows命名管道实现IPC的一种有效方法
  3. DL之DNN优化技术:DNN中抑制过拟合/欠拟合、提高泛化能力技术的简介、使用方法、案例应用详细攻略
  4. java raster_Raster
  5. UI线框图模板素材实际应用好帮手
  6. Java虚拟机自动内存管理
  7. 对比学习视角:重新审视推荐系统的召回粗排模型
  8. 【CCCC】L2-010 排座位 (25分),,并查集+二维矩阵判定关系
  9. Lottie动画概述,文末有彩蛋
  10. 小学计算机课动画制作的评课稿,信息技术评课稿
  11. learun敏捷框架工作流:企业效率助推神器
  12. 常见的web网站攻击类型
  13. css3动画按钮_CSS3的动画按钮
  14. 两台电脑共享上网怎么设置?快解析轻松解决共享上网问题
  15. HTML和CSS仿唯品会首页,ecshop仿唯品会2014全模板带团购品牌特卖
  16. CAD得到所有图层名(网页版)
  17. JDBC-----什么是JDBC
  18. Ubuntu Linux开机黑屏的永久解决办法
  19. 维棠下载flv出错 kmplayer背黑锅
  20. 100Days-ML --- Day1

热门文章

  1. c陷进与缺陷笔记(5)
  2. xwiki开发指南1-使用XWiki创建FAQ应用
  3. SAST——Checkmarx静态检测工具收集(2)
  4. DB2查看执行过长的SQL
  5. 单车模型下方向盘转角与转弯半径关系
  6. 使用c#封装海康SDK出现无法加载 DLL“..\bin\HCNetSDK.dll”: 找不到指定的模块
  7. 数据是:如何在 ”内存“中的 ”存“ 和 ”取“ 的
  8. java生成pdf不支持中文_java生成pdf以及解决中文中文乱码问题
  9. APP 游戏审核改动
  10. 【课程作业】Pygame游戏开发之三个小游戏 容易简单 附项目代码和游戏介绍