happy-ip支持protobuf协议框架

简介

        happy-ip增加network文件夹(路径:./src/network),提供基于happy-ip的protobuf封装,方便间盘侠们基于RPC,快速的开发网络通信框架。之所以要封装protobuf框架,是因为定义底层数据传输结构是繁琐、且易出错的(字节序转换)。让开发者使用protobuf消息,而忽略底层的复杂传输结构,同时提够灵活的、安全的传输结构,是本次network模块的主要目标。此协议框架提供如下功能:

        1、更有好的使用(使用者只用关心protobuf消息、而忽略网络传输结构);

        2、提供压缩模式传输数据(默认支持klz压缩);

        3、支持快速的扩展为其他格式的能力(json、xml等);

        4、提供错误自动处理机制(默认会向客户端应答response_error消息);

        5、多种日志输出模式(默认为cout、可设置glog输出);

网络传输结构介绍

        网络传输结构定义如下

#pragma pack(push, 1)
                struct NetworkHeader
                {
                    int session_id; // 会话标识
                    int message_name_length; // 消息名称长度
                    int content_length; // 消息内容长度
                    uint8_t content_compress_type; // 0: 未压缩; 1: klz压缩
                    uint32_t check_sum; // 头校验和
                    DEFINE_HOST_NETWORK_CONVERT("44414");
                };
#pragma pack(pop)
                struct NetworkData
                {
                    NetworkHeader header; // 消息头
                    string message_name; // 消息名称
                    string content; // 消息内容
                    uint32_t check_sum; // 校验和
                };

        网络传输是按照 NetworkData结构封装的,所有网络传输的数字都是采用网络字节序。

具体类介绍

UtilMessageFactory类

        继承happy-ip的messagefactory类,实现I基类IsConsumedForRead与HandleRead函数。IsConsumedForRead是改变调用方式到NetworkConvert类(所有网络转换相关的业务,都到该类实现)的IsConsumed方法。HandleRead函数也是调用NetworkConvert类实现网络数据到protobuf数据转换,同时提供自动错误应答机制,提供Produce方法处理收到的protobuf数据

ServerMessageFactory类

        继承UtilMessageFactory类,实现了Produce方法,通过调用映射函数处理protobuf消息。值得注意的是is_response设置的是true。开发者在写服务端的MessageFactory继承此类,后面的用例会详细说明。

ClientMessageFactory类

         继承UtilMessageFactory类,实现了Produce方法,通过调用映射函数处理protobuf消息。值得注意的是is_response设置的是false。同时提够closed_print参数,在连接关闭是打印消息。开发者在写客户端的MessageFactory继承此类,后面的用例会详细说明。

NetworkConvert类

        网络解析类,提供IsConsumed(是否为完整包)、ToProto(网络结构转换为proto结构)、ToNetwork(proto结构转换为网络结构)等抽象方法。

ProtoNetworkConvert类

       继承于NetworkConver类,实现了IsConsumed(是否为完整包)、ToProto(网络结构转换为proto结构)、ToNetwork(proto结构转换为网络结构)等抽象方法,定义了网络传输结构。

ResponseError类

        protobuf生成类,原始定义如下:

message ResponseError
{
    required int32 error_code = 1;
    required string error_string = 2;
}

其他文件说明

        quicklz.h、quicklz.cpp:klz压缩实现

        output.h:输出模式定义(默认cout、可选glog)

        news.h:内部模块传输数据结构

        adler32.h、adler32.cpp:checksum32算法实现

资源下载

      git地址为:https://github.com/wangziwen333/happy-ip

      boost库1.63版本头文件与库文件下载路径:https://download.csdn.net/download/wang19840301/10665704

windows编译参数

cmake .. -LA -DBOOST_INCLUDE_DIR='E:\git\3rdparty\include' -DBOOST_LIB_DIR='E:\git\3rdparty\lib\win32_debug' -DCMAKE_BUILD_TYPE=Debug  -DBUILD_EXAMPLES=ON -DBUILD_NETWORK=ON

linux编译参数

cmake .. -LA -DBOOST_INCLUDE_DIR='/mnt/e/git/3rdparty/include' -DBOOST_LIB_DIR='/mnt/e/git/3rdparty/lib/linux_debug' -DCMAKE_BUILD_TYPE=Debug -DBUILD_EXAMPLES=ON -DBUILD_EXAMPLES=ON -DBUILD_NETWORK=ON

猜你喜欢

转载自blog.csdn.net/wang19840301/article/details/82890528
今日推荐