【从零实现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框架】- 项目实现 - 项目消息类型字段信息定义篇 做了一个较为详细的介绍,不知道对你有没有帮助呢

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

相关推荐
SQingL33 分钟前
解决SSLError: [SSL: DECRYPTION_FAILED_OR_BAD_RECORD_MAC] decryption faile的问题
服务器·网络协议·ssl
一个天蝎座 白勺 程序猿3 小时前
Python爬虫(8)Python数据存储实战:JSON文件读写与复杂结构化数据处理指南
爬虫·python·json
一路向北he3 小时前
pcm数据不支持存储在json里面,需要先转base64
json·pcm
网工养成记_121383 小时前
路由协议基础
网络·网络协议·智能路由器
茉莉玫瑰花茶5 小时前
socket套接字-UDP(中)
网络·网络协议·udp
iOS开发上架哦5 小时前
charles网络抓包入门教程
网络协议·安全
喝养乐多长不高6 小时前
详细PostMan的安装和基本使用方法
java·服务器·前端·网络协议·测试工具·https·postman
薯条不要番茄酱7 小时前
【网络原理】从零开始深入理解TCP的各项特性和机制.(三)
网络·网络协议·tcp/ip
专注API从业者9 小时前
反爬策略应对指南:淘宝 API 商品数据采集的 IP 代理与请求伪装技术
网络·网络协议·tcp/ip
老六ip加速器17 小时前
如何获取静态IP地址?完整教程
网络·网络协议·tcp/ip