经过我前面介绍的C++学习书籍、博客网站、在线视频学习网站(没有看过的同学可以到我的主页翻看),相信大家已经有一些C++基础的,有了理论,需要通过项目来提升自身技术能力,下面推荐几个开源项目:
那我就话不多说,直接开始上手了
项目涉及后台开发组件包括:
cpp_redis
项目主页:
https://github.com/Cylix/cpp_redis/
C++11 Lightweight Redis client: async, thread-safe, no dependency, pipelining, multi-platform
这是一个 C++11编写的轻量级 Redis 客户端,具有异步、线程安全、无依赖、pipelining、跨平台等特性。代码量不大,可以学习如何编写一个简洁高效的网络通信客户端程序,另外项目采用了C++11编写,通过这个开源项目,你还可以学习如何使用这些语言新特性。
LevelDb
项目主页:
https://github.com/google/leveldb
由 Google 的两位工程师 Sanjay Ghemawat 和 Jeff Dean 开发的键/值对(Key/Value Pair)嵌入式数据库,具有很高的随机写,顺序读/写性能,采用 LSM树 (Log Structured-Merge Tree)实现,LSM树的核心思想就是放弃部分读的性能,换取最大的写入能力.
关于LevelDb 详细内容学习可参考教程:
https://kevins.pro/leveldb_chinese_doc.html
https://leveldb-handbook.readthedocs.io/zh/latest/basic.html
在后台项目中需要经常处理配置文件解析工作,这些配置文件可以是XML、JSON或者是YAML等格式的标记语言文件,下面这几个项目就是几个不错的文件解析器,代码可读性好。
C++ JSON 解析器
JSON++ is a light-weight JSON parser, writer and reader written in C++. JSON++ can also convert JSON documents into lossless XML documents.
用C++写的轻量级 JSON 解析器,同时还可以将 jSON 文档转换成 XML 文档
项目主页:
https://github.com/hjiang/jsonxx
迷你的C++11 JSON库
json11 is a tiny JSON library for C++11, providing JSON parsing and serialization.
同样是是个mini JSON 库,仅 1个 CPP 文件和一个头文件,方便地嵌入到自己的项目中
项目主页:
https://github.com/dropbox/json11
我们经常需要在项目中处理 XML 配置文件,有没有想过自己编写一个简单通过的XML解析器,这里就是一个用C++ 编写的,非常简单小巧的 XML 解析器,可以很容易地集成到其它项目中,出于C++学习目的的话,你也可以把代码下载下来学习练手。
项目主页:
http://sourceforge.NET/projects/tinyxml/
YAML 也是一种类似XML和JSON一样的配置文件语言,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言),是专门用来写配置文件的语言,相比 JSON 更加简洁和方便阅读。
这个项目就是一个用cpp写的yaml文件解析器,项目代码量也不大,结构清晰,可以用作学习参考。
项目主页:
https://github.com/jbeder/yaml-cpp
如果说前面的是练手,那下面介绍的项目会高级一些。
下面会介绍几个 C++ 后台开发中,具有代表性的项目和开源框架,做后台开发,这些项目你或多或少会使用到,了解一些项目源码自然更好。
Muduo
https://github.com/chenshuo/muduo
说到开源网络库,就不得不提 muduo ,它是一个基于 Reactor 模式的现代 C++ 网络库,采用非阻塞 IO 模型,基于事件驱动和回调,原生支持多核多线程,适合编写 linux 服务端多线程网络应用程序。
muduo 是知乎大神陈硕开发,基于 Reactor 模式,Redis和JAVA的Netty库也是采用这种模式实现,具有如下特点:采用非阻塞 IO 模型、基于事件驱动和回调,原生支持多核多线程。
学习 moduo 源码可以配合陈硕的《Linux多线程服务器端编程》,这本书以muduo 网络库为例,讲解这种编程模型的使用方法及注意事项,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。
后端开发常用到消息队列,消息队列是分布式系统中重要的组件,主要解决了应用耦合、异步处理、流量削峰等问题。
消息队列在实际应用中包括如下四个场景:
消息队列详细介绍参考:
https://cloud.tencent.com/developer/article/1006035
业界有名的 zeromq 核心代码也是用 C++ 编写,如果想深入研究消息队列,可以从这入手试试,下面给出项目主页和门户网站。
https://zeromq.org/
https://github.com/zeromq/libzmq
数据结构、对象与二进制串
不同的计算机语言中,数据结构,对象以及二进制串的表示方式并不相同。
数据结构和对象:对于类似Java这种完全面向对象的语言,工程师所操作的一切都是对象(Object),来自于类的实例化。在Java语言中最接近数据结构的概念,就是POJO(Plain Old Java Object)或者Javabean--那些只有setter/getter方法的类。而在C++这种半面向对象的语言中,数据结构和struct对应,对象和class对应。
二进制串:序列化所生成的二进制串指的是存储在内存中的一块数据。C++语言具有内存操作符,所以二进制串的概念容易理解,例如,C++语言的字符串可以直接被传输层使用,因为其本质上就是以’