【从零实现Json-Rpc框架】- 项目实现 - 项目消息类型字段信息定义篇

📢博客主页:https://blog.csdn.net/2301_779549673

📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson

📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

📢本文由 JohnKi 原创,首发于 CSDN🙉

📢未来很长,值得我们全力奔赴更美好的生活✨

文章目录


📢前言

截至目前,有关 rpc框架基础准备第三方库,以及零碎接口都已经解释或者封装好了

那接下来,笔者将针对 rpc框架消息类型字段 进行一个大致的介绍

因为我们只是需要知道我们都需要哪些类型的字段,所以这里不会细说每个字段的用途,毕竟他们的存在只是便于我们理解和使用


🏳️‍🌈一、请求字段宏定义

大家还记得下面这张图吗,在项目设计篇中有一笔带过。

其实,请求字段 就是这张图的 绿色部分

至于如何理解绿色字段,就是 英文翻译对应的那个模块body 部分的数据,但是这里并没有细分,将相同类型的归为一类

就不多说了,直接展示

bash 复制代码
    #define KEY_METHOD      "method"        // 方法
    #define KEY_PARAMS      "parameters"    // 参数
    #define KEY_TOPIC_KEY   "topic_key"     // 主题名称
    #define KEY_TOPIC_MSG   "topic_msg"     // 主题消息
    #define KEY_OPTYPE      "optype"        // 主题操作类型
    #define KEY_HOST        "host"          // 业务逻辑相关的扩展字段
    #define KEY_HOST_IP     "host_ip"       // IP地址
    #define KEY_HOST_PORT   "port"          // port端口
    #define KEY_RCODE       "rcode"         // 响应码
    #define KEY_RESULT      "result"        // 响应结果

🏳️‍🌈二、消息类型定义

bash 复制代码
    // 消息类型定义
    enum class MType{
        REQ_RPC = 0,    // Rpc请求
        RSP_RPC,        // Rpc响应
        REQ_TOPIC,      // 主题操作请求:
        RSP_TOPIC,      // 主题操作响应:
        REQ_SERVICE,    // 服务操作请求:
        RSP_SERVICE     // 服务操作响应:
    };

🏳️‍🌈三、响应码类型定义

bash 复制代码
    // 响应码类型定义
    enum class RCode{
        RCODE_OK = 0,               // 成功处理
        RCODE_PARSE_FAILED,         // 解析失败
        RCODE_INVALID_MSG,          // 无效的消息
        RCODE_DISCONNECTED,         // 连接断开
        RCODE_INVALID_PARAMS,       // 无效的Rpc调用参数
        RCODE_NOT_FOUND_SERVICE,    // RPC服务不存在
        RCODE_INVALID_OPTYPE,       // 无效的操作类型
        RCODE_NOT_FOUND_TOPIC       // 主题不存在
    };

🏳️‍🌈四、响应码返回值

bash 复制代码
// 响应码返回值
    static std::string errReason(RCode code){
        static std::unordered_map<RCode, std::string> err_map = {
            {RCode::RCODE_OK, "成功处理"}, 
            {RCode::RCODE_PARSE_FAILED, "解析失败"}, 
            {RCode::RCODE_INVALID_MSG, "无效的消息"}, 
            {RCode::RCODE_DISCONNECTED, "连接断开"}, 
            {RCode::RCODE_INVALID_PARAMS, "无效的Rpc调用参数"}, 
            {RCode::RCODE_NOT_FOUND_SERVICE, "RPC服务不存在"}, 
            {RCode::RCODE_INVALID_OPTYPE, "无效的操作类型"}, 
            {RCode::RCODE_NOT_FOUND_TOPIC, "主题不存在"}
        };
        
        auto it = err_map.find(code);
        if(it != err_map.end()){
            return it->second;
        }
        return "未知错误";
    }

🏳️‍🌈五、Rpc请求类型

bash 复制代码
// Rpc请求类型定义
    enum class RType{
        REQ_SYNC = 0,   // 同步请求
        REQ_ASYNC,      // 异步请求
        REQ_CALLBACK    // 回调请求
    };

🏳️‍🌈六、主题操作类型定义

bash 复制代码
// 主题操作类型定义
    enum class TopicOptype{
        TOPIC_CREATE = 0,   // 创建主题
        TOPIC_REMOVE,       // 删除主题
        TOPIC_SUBSCRIBE,    // 订阅主题
        TOPIC_CANCEL,       // 取消订阅
        TOPIC_PUBLISH       // 发布主题消息
    };

🏳️‍🌈七、服务操作类型定义

bash 复制代码
// 服务操作类型定义
    enum class ServiceOptype{
        SERVICE_REGISTRY,   // 注册服务
        SERVICE_DISCOVERY,  // 发现服务
        SERVICE_ONLINE,     // 上线服务
        SERVICE_OFFLINE     // 下线服务
    };

🏳️‍🌈八、整体代码

bash 复制代码
#pragma once

#include <iostream>
#include <unordered_map>


namespace fields{
    #define KEY_METHOD      "method"        // 方法
    #define KEY_PARAMS      "parameters"    // 参数
    #define KEY_TOPIC_KEY   "topic_key"     // 主题名称
    #define KEY_TOPIC_MSG   "topic_msg"     // 主题消息
    #define KEY_OPTYPE      "optype"        // 主题操作类型
    #define KEY_HOST        "host"          // 业务逻辑相关的扩展字段
    #define KEY_HOST_IP     "host_ip"       // IP地址
    #define KEY_HOST_PORT   "port"          // port端口
    #define KEY_RCODE       "rcode"         // 响应码
    #define KEY_RESULT      "result"        // 响应结果

    // 消息类型定义
    enum class MType{
        REQ_RPC = 0,    // Rpc请求
        RSP_RPC,        // Rpc响应
        REQ_TOPIC,      // 主题操作请求:
        RSP_TOPIC,      // 主题操作响应:
        REQ_SERVICE,    // 服务操作请求:
        RSP_SERVICE     // 服务操作响应:
    };

    // 响应码类型定义
    enum class RCode{
        RCODE_OK = 0,               // 成功处理
        RCODE_PARSE_FAILED,         // 解析失败
        RCODE_INVALID_MSG,          // 无效的消息
        RCODE_DISCONNECTED,         // 连接断开
        RCODE_INVALID_PARAMS,       // 无效的Rpc调用参数
        RCODE_NOT_FOUND_SERVICE,    // RPC服务不存在
        RCODE_INVALID_OPTYPE,       // 无效的操作类型
        RCODE_NOT_FOUND_TOPIC       // 主题不存在
    };

    // 响应码返回值
    static std::string errReason(RCode code){
        static std::unordered_map<RCode, std::string> err_map = {
            {RCode::RCODE_OK, "成功处理"}, 
            {RCode::RCODE_PARSE_FAILED, "解析失败"}, 
            {RCode::RCODE_INVALID_MSG, "无效的消息"}, 
            {RCode::RCODE_DISCONNECTED, "连接断开"}, 
            {RCode::RCODE_INVALID_PARAMS, "无效的Rpc调用参数"}, 
            {RCode::RCODE_NOT_FOUND_SERVICE, "RPC服务不存在"}, 
            {RCode::RCODE_INVALID_OPTYPE, "无效的操作类型"}, 
            {RCode::RCODE_NOT_FOUND_TOPIC, "主题不存在"}
        };
        
        auto it = err_map.find(code);
        if(it != err_map.end()){
            return it->second;
        }
        return "未知错误";
    }

    // Rpc请求类型定义
    enum class RType{
        REQ_SYNC = 0,   // 同步请求
        REQ_ASYNC,      // 异步请求
        REQ_CALLBACK    // 回调请求
    };

    // 主题操作类型定义
    enum class TopicOptype{
        TOPIC_CREATE = 0,   // 创建主题
        TOPIC_REMOVE,       // 删除主题
        TOPIC_SUBSCRIBE,    // 订阅主题
        TOPIC_CANCEL,       // 取消订阅
        TOPIC_PUBLISH       // 发布主题消息
    };

    // 服务操作类型定义
    enum class ServiceOptype{
        SERVICE_REGISTRY,   // 注册服务
        SERVICE_DISCOVERY,  // 发现服务
        SERVICE_ONLINE,     // 上线服务
        SERVICE_OFFLINE     // 下线服务
    };
}

👥总结

本篇博文对 【从零实现Json-Rpc框架】- 项目实现 - 项目消息类型字段信息定义篇 做了一个较为详细的介绍,不知道对你有没有帮助呢

觉得博主写得还不错的三连支持下吧!会继续努力的~

相关推荐
秃了也弱了。2 小时前
FASTJSON库:阿里出品java界json解析库,使用与踩坑记录
java·开发语言·json
北京耐用通信4 小时前
耐达讯自动化CANopen转Profibus网关:为风力发电场打造高可靠协议转换解决方案
人工智能·物联网·网络协议·自动化·信息与通信
北京耐用通信4 小时前
耐达讯自动化CANopen转Profibus 网关:实现光伏逆变器无缝接入工业以太网的技术解析
网络·人工智能·物联网·网络协议·自动化·信息与通信
..过云雨4 小时前
应用层自定义协议与序列化一站式指南
网络协议·tcp/ip·json·信息与通信
Wadli4 小时前
项目5 |HTTP服务框架
网络·网络协议·http
CCPC不拿奖不改名4 小时前
网络与API:HTTP基础+面试习题
网络·python·网络协议·学习·http·面试·职场和发展
乾元4 小时前
无线定位与链路质量预测——从“知道你在哪”,到“提前知道你会不会掉线”的网络服务化实践
运维·开发语言·人工智能·网络协议·重构·信息与通信
切糕师学AI4 小时前
SSL是什么?
网络协议
Tao____4 小时前
企业级物联网平台
java·网络·物联网·mqtt·网络协议
eggcode5 小时前
C#读写Bson格式的文件
c#·json·bson