如何学习和使用asio 网络库
asio是一个建立在Boost所提供的相关组件之上的异步的网络库,可以运行在Win/Linux/Unix等各种平台之上。不过随着C++11的发布,其对于Boost的依赖也越来越少,作者又做了一个不依赖于boost的版本。
虽然网络上关于C++网络编程的框架和库的轮子多的一比,但没有一个比这个更通用,比这个更实用。 有些只能在linux上运行,比如muduo,有的依赖库非常多,比如360的evpp,有的只偏重于某一方面,不通用,比如不支持ssl。好用的大概只有asio这一个了。可惜关于asio的学习资料并不是特别多,给学习带来了一些不便。而且asio这些年开发比较快,有些东西也在一直变化。
不过好在还是有一些资料可以借鉴,基本接口也比较稳定。
下面我介绍一下学习的一些路径和资料。
asio下载地址:
Asio C++ Library
文档:
Documentation
一、基本类学习
首先要了解内部io_context的使用,多线程与io_context如何配合。
run(), poll(), post()具体是什么意义。
worker如何使用
c++11 的bind是怎么工作的,只需要了解具体如何用,不用了解底层实现。
二、socket类如何读写
同步与异步函数的使用。
acceptor.accept()
acceptor.async_accept()
sock_.connect()
sock_.async_connect()
三、基本的例子
src/examples目录下, cpp11目录下比较多,基本上几个一看就明白一般的server和client的逻辑
四、真实程序
例子看过后就看看真正的用asio写的程序
1.用asio写的
GitHub - trojan-gfw/trojan: An unidentifiable mechanism that helps you bypass GFW.
用到ssl里面的许多功能。
推荐图书
图书1
Boost.Asio C++ Network Programming Cookbook
https://github.com/Belgorodsky/BoostAsioCppNetworkProgrammingCookbookDmitroRadchuk
pdf链接Boost.AsioC++NetworkProgrammingCookbook2016新书无水印pdf0分_boost-C++文档类资源-CSDN下载
图书2
讲解asio中的基本类的使用
asio 网络编程第二版英文原版pdf,这个文档做的比较好,标签比较全。
boostasioc++networkprogramming2nd-C++文档类资源-CSDN下载
如何学习和使用asio 网络库相关推荐
- [Boost基础]并发编程——asio网络库——定时器deadline_timer
asio库基于操作系统提供的异步机制,采用前摄器设计模式(Proactor)实现了可移植的异步(或者同步)IO操作,而且并不要求使用多线程和锁定,有些的避免了多线程编程带来的诸多有害副作用(如条件竞争 ...
- 基于事件驱动的编程模型(C++asio网络库相关)
基于事件驱动的编程模型 1.reactor模式:lighttpd,libevent,libev,poco,redis 2.Proactor模式:Asio,locp rector模式简单一点 react ...
- boost库中优秀的网络库asio
文章目录 一.须知 二.ASIO 三.我们将从研究同步操作开始 四.当使用异步操作时,会发生不同的事件序列 五.Proactor模型 六.常用内容 七.C++ 建立本地网络服务器 (Boost.Asi ...
- muduo网络库学习(八)事件驱动循环线程池EventLoopThreadPool
muduo是支持多线程的网络库,在muduo网络库学习(七)用于创建服务器的类TcpServer中也提及了TcpServer中有一个事件驱动循环线程池,线程池中存在大量线程,每个线程运行一个Event ...
- muduo网络库学习(七)用于创建服务器的类TcpServer
目前为止,涉及到的绝大多数操作都没有提及线程,EventLoop,Poller,Channel,Acceptor,TcpConnection,这些对象的执行都是在单独线程完成,并没有设计多线程的创建销 ...
- muduo网络库学习(四)事件驱动循环EventLoop
muduo的设计采用高并发服务器框架中的one loop per thread模式,即一个线程一个事件循环. 这里的loop,其实就是muduo中的EventLoop,所以到目前为止,不管是Polle ...
- ASIO 腾空出世 (那些年我们追过的网络库.PartII)
ASIO 腾空出世 在地球最大的岛上,另一位少年开始拜读 ACE 的大作.那时候,没有 libuv 没有 libev 更没有 libevent . 有的只是 ACE. 然而这个南方小国的少年没有跟风陷 ...
- 《Linux多线程服务端编程:使用muduoC++网络库》学习笔记
文章目录 第1章 线程安全的对象生命期管理 1.1 当析构函数遇到多线程 1.1.1 线程安全的定义 1.1.3 线程安全实例 1.2 对象的创建很简单 1.3 销毁很难 1.4 线程安全的Obser ...
- 【博客410】Go net网络库学习
内容:记录学习go net网络库 服务端类型接口: 1. 解析地址// 解析TCP地址 func ResolveTCPAddr(network, address string) (*TCPAddr, ...
- muduo网络库学习总结:基本架构及流程分析
muduo网络库学习:基本架构及流程分析 基本架构 Basic Reactor Mutiple Reactor + ThreadPool muduo库的基本使用 基本结构介绍 EventLoop类 P ...
最新文章
- 【Python 小知识】[:-1] 和 [::-1]
- ASP.NET中实现模版的动态加载
- Zend Studio使用教程之升级Zend Studio(1/3)
- LCD1602(以51单片机为例)
- 微软将为Linux 操作系统带来TEE的支持:TEE(Trusted Execution Environment,可信执行环境)
- S太赞了!大佬竟然用ELK搭建起了支撑TB级的日志监控系统...
- Microsoft.ACE.OLEDB.12.0 读取混合列
- spring-05 AOP
- 如何做到秒级扩容1000加业务节点
- 软件测试预演环境,什么是软件测试用例预演 有何优点?-软件水平考试-考试吧...
- ASP.NET 发送电子邮件 smtp
- Autumn中文文档0:为什么使用Autumn
- JavaScript 销毁对象
- PageHelper.startPage与PageHelper.offsetPage区别
- 一个简单的python爬虫程序
- 暴力破解键盘上所有组合的密码需要多久?
- 前端开发规范和开发文档的书写规范
- 华为OD机试 - 斗地主之顺子
- html下拉框如何加边框颜色,css如何加边框颜色?
- JAVA毕业设计服装批发进销存系统计算机源码+lw文档+系统+调试部署+数据库
热门文章
- linux环境下pandas库的安装,Pandas库的基本使用 pip安装 Series DataFrame
- 海思HI3798M GPIO和PWM操作
- 徐培成电商项目-徐培成-专题视频课程
- matlab符号运算报错,matlab符号运算符
- mysql 导出表结构或表数据的操作
- Linux查找大文件命令
- 计算机教学能力大赛实施报告模板,教学能力比赛教学实施报告现场汇报PPT模板-橙色主题.pptx...
- thymeleaf实现分页
- dx逆向建模步骤_初级反求逆向建模(一)
- 虚拟机VMware安装PhoenixOS(凤凰OS)