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

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

相关推荐
拖孩24 分钟前
[特殊字符]我在 Chatterbox(话匣子)中 Websocket 的使用-上篇(基本介绍)
网络·websocket·网络协议
DanmF--2 小时前
用C#实现UDP服务器
服务器·网络协议·udp·c#
iOS技术狂热者2 小时前
wireshark开启对https密文抓包
websocket·网络协议·tcp/ip·http·网络安全·https·udp
GW_Cheng3 小时前
springmvc redirect 使用https后跳转到了http://域名:443问题处理
网络协议·http·https
入眼皆含月3 小时前
Harbor自建证书实现Https访问
网络协议·http·https
金丝猴也是猿4 小时前
Flutter 完整开发指南
websocket·网络协议·tcp/ip·flutter·网络安全·https·udp
cs阿坤dn5 小时前
IP大洗牌ipv6强势来袭!!!【ipv6配置及应用】
网络·网络协议·tcp/ip
DanmF--5 小时前
Unity中UDP异步通信常用API使用
网络·网络协议·unity·udp·c#
九州ip动态5 小时前
小红书多账号运营:如何实现每个账号独立 IP发布文章
网络·网络协议·tcp/ip
xkroy6 小时前
UDP数据报套接字编程
网络·网络协议·udp