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

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

相关推荐
诗句藏于尽头3 小时前
完成ssl不安全警告
网络协议·安全·ssl
会飞的鱼先生6 小时前
Node.js-http模块
网络协议·http·node.js
-qOVOp-10 小时前
408第三季part2 - 计算机网络 - ip分布首部格式与分片
网络协议·tcp/ip·计算机网络
数通Dinner11 小时前
RSTP 拓扑收敛机制
网络·网络协议·tcp/ip·算法·信息与通信
百锦再11 小时前
.Net配置文件appsetting.json的几种读取方法
chrome·json·.net·依赖注入·appsetting·web.config
泽020214 小时前
C++之红黑树认识与实现
java·c++·rpc
qq_1715388517 小时前
TCP/IP协议精解:IP协议——互联网世界的邮政编码系统
网络·网络协议·tcp/ip
兮动人18 小时前
获取终端外网IP地址
java·网络·网络协议·tcp/ip·获取终端外网ip地址
Code季风19 小时前
深入理解 gRPC 服务定义:从基础到高级
rpc·go
海外空间恒创科技19 小时前
一台香港原生ip站群服务器多少钱?
服务器·网络协议·tcp/ip