火爆了,小白必读的优质C++开源项目( 二 )

  • 异步处理:多应用对消息队列中同一消息进行处理,应用间并发处理消息,相比串行处理,减少处理时间;
  • 限流削峰:广泛应用于秒杀或抢购活动中,避免流量过大导致应用系统挂掉的情况;
  • 消息驱动的系统:系统分为消息队列、消息生产者、消息消费者,生产者负责产生消息,消费者(可能有多个)负责对消息进行处理;
  • 消息队列详细介绍参考:
    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++语言的字符串可以直接被传输层使用,因为其本质上就是以’’结尾的存储在内存中的二进制串 。在Java语言里面,二进制串的概念容易和String混淆 。实际上String 是Java的一等公民,是一种特殊对象(Object) 。对于跨语言间的通讯,序列化后的数据当然不能是某种语言的特殊数据类型 。二进制串在Java里面所指的是byte[],byte是Java的8中原生数据类型之一(Primitive data types) 。
    序列化参考链接:
    https://tech.meituan.com/2015/02/26/serialization-vs-deserialization.html
    Protobuf
    Protocol Buffer (简称Protobuf) 是Google 出品的性能优异、跨语言、跨平台的序列化库 。
    项目主页
    https://github.com/protocolbuffers/protobuf
    教程参考:Protobuf 终极教程
     
    RPCRPC (Remote Procedure Call)远程过程调用是一个计算机通信协议 。我们一般的程序调用是本地程序内部的调用,RPC允许你像调用本地函数一样去调用另一个程序的函数,这中间会涉及网络通信和进程间通信,但你无需知道实现细节,RPC框架为你屏蔽了底层实现 。RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过「发送请求-接受回应」进行信息交互的系统 。
    推荐几个RPC开源项目,供学习研究,先从简单的玩具项目入手:
    rest_rpchttps://github.com/qicosmos/rest_rpc
    c++11, high performance, cross platform, easy to use rpc framework.
    It's so easy to love RPC.
    Modern C++开发的RPC库就是这么简单好用!
    rest_rpc是一个高性能、易用、跨平台、header only的c++11 rpc库,它的目标是让tcp通信变得非常简单易用,即使不懂网络通信的人也可以直接使用它 。可以快速上手,使用者只需要关注自己的业务逻辑即可 。
    再介绍几个业内成熟的后台开发RPC框架:
    谷歌gRPC谷歌开源的高性能远程过程调用系统 。
    在 gRPC 里


    推荐阅读