网络库概述
网络库概述
一、背景
在软件开发中,不可绕过的网络编程。在具体项目开发中,自己和同事都会遇到认识现在存在的网络库分析,选择合适的网络库,并学习相应的API调用方法,深入理解内部的运行机制是每个程序员不可面临的问题。由于我一直从事C/C++应用开发,故此想总结一下当前的网络库的使用方法,和广大的网友切磋学习,并记录下学习心得。
二、基础知识参考书
1. 《C++ Primer Plus》 中文版 这本书作为工具书,解决C++基本语法
2. 《Unix环境高级编程》 中文版 这本书作为工具书,解决Linux应用层编程系统API的具体用法和调用流程
3. 《Unix网络编程》卷一 这本书主要介绍tcp、udp的建立连接,断开连接的原理到具体的实现过程,以及介绍操作系统提供的API的功能以及调流程,强烈建议,至少读三遍。
4. 《Uinx网络编程 -- 卷2 进程间通信》 一般了解,具体目前没有做深刻的理解。
5. 《设计模式》 23种设计模式熟读于心,可能现在无法使用出来,但是一定有大用处,在讲解ACE库的使用,会着重去讲述
6. 《TCP/IP 详解 卷一》 本书了解TCP/IP协议,基本原理,作为了解,以便于上层应用编程。
三、目的
网络库为了更好的解决并发问题,负载问题,缓存分配,内存问题,在后面的章节将会逐步分析,编码实现,验证测试,细致的剖析在具体场景如何取舍。让所有读者和业界的同行大家有个深入的理解。也将我的一些经验与大家分享。
四、现在网络库大概分析
1. libevent
C语言跨平台库,目前应用最广泛,并且历史还是很悠久。这个库是用纯C写的,对于开发的程序员来说,相对学习起来门槛相对低一些,并且是一个轻量级的网络组件,并且目前是一个单线程的,对于性能相对低端的CPU使用起来还是蛮好的,在单进程的场景下,还是绰绰有余的,使用在并发线程中,库并不能保证线程安全,需要自己去封装多个反应堆,上层逻辑去保证线程安全。具体的实现方式就是事件机制,反应堆模式开发出来的,并添加了I/O,定时器,信号。三种事件处理单独分开,又通过事件驱动融合一起。学习难度相对低一些。后续会详细介绍该库的使用方式,内部机制,开发时要注意的问题。
优势:所有网络库中,理解起来相对简单,并且基于优先级的方式去实现事件调度。非常值得去学习下。
劣势:目前在window下实现IOCP相对实现简单,不完善。
2. libev
设计更简练,性能更好,但是对windows支持的不好,没有必要做深入的学习,一般了解,过渡库。
3. libuv
支持多平台的异步IO库,主要为了node.js开发,不做深究
4. boost::asio
C++语言的跨平台库,异步IO的实现方式,Proactor机制实现,一个非常优秀的开源库
优势:提供了有别于libevent的机制实现,linux平台支持epoll,windows平台支持IOCP,感觉非常不错
劣势:需要学习大量的boost的语法,晦涩难懂,不适合小白直接进去排雷,后面我会尝试去进行使用,源码分析,深入浅出给大家讲解。boost绝对是未来C++的趋势,说点题外话,之前感觉boost是一门奇门淫巧,但是深入学习,会惊异于大佬的思想,作为一个程序员一定要不断地去精进自己的技术。
5.Muduo
C++语言实现的网络库,目前只是支持linux,单线程,不做深究,简单了解下还有这么库就行了,网路库的趋势,唯一的目的就是消除平台差异,让应用开发起来,可移植,单平台不做考虑。
6.ACE
目前最复杂的网络库,引入设计,框架,系统适配,面向组件,面向框架,自我感觉,这个库作为学习,对自己会是一个很好的旅程,后期,我会着重编写关于ACE的文章。
五、结语:
在实际开发中,我们需要网络库开发工作,需要对相关知识的积累,阐述了当前C/C++实现的网络库的简介,大家一定对当前网络库现状
有个简单的了解,接下来我会着重写libevent库和ACE库的文章。
同时:我创建了一个公众号:可以和大家同步沟通问题,尽量满足大家对网络库的需求。
编写时间:2021-12-19 00:18:46