学习C++项目——一个基于C++11简单易用的轻量级网络编程框架 1

一个基于C++11简单易用的轻量级网络编程框架

一、项目下载、导入、编译和运行

  现在准备深入学习 C++ ,先肝一个项目,这个项目是《一个基于C++11简单易用的轻量级网络编程框架》,下载地址为:

Gitee:  https://gitee.com/xia-chu/ZLToolKit
Github: https://github.com/ZLMediaKit/ZLToolKit (更详细)

  我使用的环境是虚拟机,虚拟机是 VMware,系统是 CentOs ,这里环境只要有一个 Linux 系统环境要求就可以。下载以后的文件为:ZLToolKit-master.zip,在终端输入,

unzip ZLToolKit-master.zip

这样就解压成功了,并且把解压后的文件改为 ZLToolKit 。
  按照项目中 README.txt 要求,需要如下配置,

## 编译(Linux)
- 我的编译环境
  - Ubuntu16.04 64 bit + gcc5.4(最低gcc4.7)
  - cmake 3.5.1
- 编译
  cd ZLToolKit
  ./build_for_linux.sh

  但是对于一个新的 Linux 系统,我的是 CentOS 8.4,需要安装 gcc 的功能,需要安装 MySQL 才能运行成功。经过多次尝试,找到了这个博客有效,安装 MySQL 推荐这个博客:

https://www.baidu.com/link?url=1uWJ7a-kHWb5bNOmG0a9_isilVpXlXxK3EG19gnxiX0w6I1Qsg3GDCSZrduhdUQthzGjVGYmH53E9V_zz9KcRa&wd=&eqid=8dd7ef6e000012e80000000361517bf5

  还有一点需要注意,假如自己创建了用户,比如我的是 wzjvv ,权限是会受到很多限制的,很多操作需要 root 权限才可以操作,自己权限也可以设置,我一般选择的是切换,使用

[wzjvv@bogon ZLToolKit]$ su
密码:
输入密码以后就会切换到 root 管理员模式下,
[root@bogon ZLToolKit]# 

对于用户是用 $ 标识,对于管理员是用 # 表示。

  如果要修改某个文件下子目录文件的所有权限,需要在管理员模式下运行,使用

[root@bogon ZLToolKit]# chmod -R 777 build(yourFile)

  因此我的环境如下,

## 编译(Linux)
- 我的编译环境
  - CentOS 8.4 64 bit + (gcc 8.4.1)
  - cmake 3.18.2
  - MySQL 8.0.26
- 编译
  cd ZLToolKit
  ./build_for_linuxMine.sh


build_for_linuxMine.sh 文件如下(我自己做过修改,把下载部分删除了):
#!/bin/bash
cd ..
cd ZLToolKit
mkdir -p linux_build
rm -rf ./build
ln -s ./linux_build ./build
cd linux_build
cmake ..
make -j4

  最后编译运行结果如下,
在这里插入图片描述
在这里插入图片描述
  编译成功,我也不知道具体代表什么意思,但是接下来可以开始看原理和内容了。第一个项目总算可以开始肝起来了。

二、项目整体框架

  这个项目的特点如下,

1. 基于C++11开发,避免使用裸指针,代码稳定可靠;同时跨平台移植简单方便,代码清晰简洁。

2. 使用epoll+线程池+异步网络IO模式开发,并发性能优越。

3. 代码经过大量的稳定性、性能测试,可满足商用服务器项目。

  项目特性,

-> 网络库
	1. tcp/udp客户端,接口简单易用并且是线程安全的,用户不必关心具体的socket api操作。
	2. tcp服务器,使用非常简单,只要实现具体的tcp会话(TcpSession类)逻辑,使用模板的方式可以快速的构建高性能的服务器。
	3. 对套接字多种操作的封装。

-> 线程库
	1. 使用线程实现的简单易用的定时器。
	2. 信号量。
	3. 线程组。
	4. 简单易用的线程池,可以异步或同步执行任务,支持functional 和 lambad表达式。

-> 工具库
	1. 文件操作。
	2. std::cout风格的日志库,支持颜色高亮、代码定位、异步打印。
	3. INI配置文件的读写。
	4. 监听者模式的消息广播器。
	5. 基于智能指针的循环池,不需要显式手动释放。
	6. 环形缓冲,支持主动读取和读取事件两种模式。
	7. mysql链接池,使用占位符(?)方式生成sql语句,支持同步异步操作。
	8. 简单易用的ssl加解密黑盒,支持多线程。
	9. 其他一些有用的工具。
	10. 命令行解析工具,可以很便捷的实现可配置应用程序

  文件目录如下,
在这里插入图片描述
  具体为

// 编译文件
build_for_android.sh // android 下编译
build_for_ios.sh // ios 下编译
build_for_linux.sh // linux 下编译
build_for_linuxMine.sh // 我自己改了一部分
build_for_mac.sh // macOS 下编译

// 源代码 + 核心文件 + 测试文件
cmake  // make 文件,不理解
src    // 程序源代码
tests  // 测试文件
usr    // 库文件
linux_build  // 编译得到的文件
CMakeLists.txt  // 不太理解,和 makefile 有关

// 版权和使用方法
qlclient-dev // 不太清楚
LICENSE      // 版权声明
README.md    // 关于项目描述

  源代码放在了 src 文件下,模块如下,

src
|
|-- NetWork				# 网络模块
|	|-- Socket.cpp			# 套接字抽象封装,包含了TCP服务器/客户端,UDP套接字
|	|-- Socket.h
|	|-- sockutil.cpp		# 系统网络相关API的统一封装
|	|-- sockutil.h
|	|-- TcpClient.cpp		# TCP客户端封装,派生该类可以很容易实现客户端程序
|	|-- TcpClient.h
|	|-- TcpLimitedSession.h 	# 派生于TcpSession,该模板类可以全局限制会话数量
|	|-- TcpServer.h			# TCP服务器模板类,可以很容易就实现一个高性能私有协议服务器
|	|-- TcpSession.h 		# TCP服务私有协议实现会话基类,用于处理TCP长连接数据及响应
|
|-- Poller				# 主线程事件轮询模块
|	|-- EventPoller.cpp		# 主线程,所有网络事件由此线程轮询并触发
|	|-- EventPoller.h
|	|-- Pipe.cpp			# 管道的对象封装
|	|-- Pipe.h
|	|-- PipeWrap.cpp		# 管道的包装,windows下由socket模拟
|	|-- SelectWrap.cpp		# select 模型的简单包装 
|	|-- SelectWrap.h
|	|-- Timer.cpp			# 在主线程触发的定时器
|	|-- Timer.h
|
|-- Thread				# 线程模块
|	|-- AsyncTaskThread.cpp		# 后台异步任务线程,可以提交一个可定时重复的任务后台执行
|	|-- AsyncTaskThread.h
|	|-- rwmutex.h			# 读写锁,实验性质的
|	|-- semaphore.h			# 信号量,由条件变量实现
|	|-- spin_mutex.h		# 自旋锁,在低延时临界区适用,单核/低性能设备慎用
|	|-- TaskQueue.h			# functional的任务列队
|	|-- threadgroup.h		# 线程组,移植自boost
|	|-- ThreadPool.h		# 线程池,可以输入functional任务至后台线程执行
|	|-- WorkThreadPool.cpp		# 获取一个可用的线程池(可以加入线程负载均衡分配算法)
|	|-- WorkThreadPool.h
|
|-- Util				# 工具模块
	|-- File.cpp			# 文件/目录操作模块
	|-- File.h
	|-- function_traits.h		# 函数、lambda转functional
	|-- logger.h			# 日志模块
	|-- MD5.cpp			# md5加密模块
	|-- MD5.h
	|-- mini.h			# ini配置文件读写模块,支持unix/windows格式的回车符
	|-- NoticeCenter.h		# 消息广播器,可以广播传递任意个数任意类型参数
	|-- onceToken.h			# 使用RAII模式实现,可以在对象构造和析构时执行一段代码
	|-- ResourcePool.h		# 基于智能指针实现的一个循环池,不需要手动回收对象
	|-- RingBuffer.h		# 环形缓冲,可以自适应大小,适用于GOP缓存等
	|-- SqlConnection.cpp		# mysql客户端
	|-- SqlConnection.h
	|-- SqlPool.h			# mysql连接池,以及简单易用的sql语句生成工具
	|-- SSLBox.cpp			# openssl的黑盒封装,屏蔽了ssl握手细节,支持多线程
	|-- SSLBox.h
	|-- TimeTicker.h		# 计时器,可以用于统计函数执行时间
	|-- util.cpp			# 其他一些工具代码,适配了多种系统
	|-- util.h
	|-- uv_errno.cpp		# 提取自libuv的错误代码系统,主要是为了兼容windows
	|-- uv_errno.h

三、总结

  接下来就是对每个文件进行理解学习,短时间要把这个项目给大致理解,不懂的知识查阅理解。接下来重点部分和难点部分会理解记录。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 轻量化插件开发框架C,是一种基于C语言的插件开发框架,旨在提升插件开发的效率和可扩展性。该框架的核心思想是将插件拆成多个小模块,并通过一个轻量级的内核将它们集成在一起。 使用该框架进行插件开发,可以轻松地实现插件的加载和卸载,同时也能方便地管理插件之间的依赖关系。此外,该框架还支持插件之间的消息传递和事件通知,使得插件之间的协作更加简单和高效。 值得特别强调的是,该框架的轻量化设计非常符合现代软件开发的趋势,不仅具有出色的性能和稳定性,还具备很高的可移植性和可复用性。因此,无论是开发单机软件还是分布式系统,使用该框架都能够大大简化开发流程,提高开发效率。 总之,轻量化插件开发框架C是一项非常有价值的技术,为插件开发者提供了一个高效、稳定、可扩展的开发环境。随着越来越多的软件系统开始采用插件化架构,该框架在未来的发展中将扮演着越来越重要的角色。 ### 回答2: 轻量化插件开发框架是一种基于C语言的开发工具,旨在提供一套简单易用的开发平台,用于开发轻量级插件。它的主要特点是代码轻量级,模块化设计,易于扩展和定制化。 轻量化插件开发框架C是针对嵌入式系统等资源受限环境而设计的,具有小巧、高效、灵活等特点。它可以帮助开发者快速地创建功能齐全、可定制的插件。同时,它也提供了一些常用的插件服务,如配置管理、日志记录、网络通信等,开发者可以直接调用这些服务,从而减少开发的工作量。 使用轻量化插件开发框架C,开发者可以快速构建插件,并通过模块化的方式管理代码,便于维护和扩展。此外,由于轻量化插件开发框架C采用了C语言作为开发语言,它可以与其他C语言开发的项目无缝集成,方便开发者利用现有的代码资源,减少重复开发的工作。 总而言之,轻量化插件开发框架C是一种高效、灵活、易于扩展的开发工具,具有小巧、高效、模块化设计等特点,能够帮助开发者快速构建插件,并使其更易于维护和扩展。 ### 回答3: 轻量化插件开发框架C是一种基于C语言的轻量级软件开发框架,旨在优化软件开发的效率并减少开发成本。该框架主要用于为主流操作系统和软件平台开发各种类型的插件和模块,包括嵌入式应用程序、浏览器插件、GUI插件、游戏插件、多媒体插件、系统工具和驱动程序等。其本质是一个用于插件开发的API集合,它提供了一种标准化的方式,使应用程序能够通过简单的接口调用来访问各种插件。 轻量化插件开发框架C的主要优点是灵活性和可扩展性。它可以被轻松地集成到任何C/C++软件项目中,并且通过支持各种自定义插件类型和数据格式,可以满足几乎所有开发需求。此外,该框架还具有开发周期短、代码量少、运行速度快等特点,这使得它成为开发人员首选的插件开发框架之一。 轻量化插件开发框架C的实现需要遵循一些核心原则。首先,插件必须尽可能简单,接口必须明确,以确保插件可以灵活地进行配置和管理。其次,框架必须提供一些必要的运行时功能,如内存管理、日志分发、线程池等,以保证插件的运行稳定性和可靠性。最后,插件必须高度可扩展,以支持各种新的插件类型、数据格式和操作系统平台。 总之,轻量化插件开发框架C是一种高效、灵活和易于使用的插件开发框架,它可以大大提高软件开发的效率和质量,适用于各种大小规模的软件项目
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值