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

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

相关推荐
HelloWorld工程师16 分钟前
不改动任何历史配置,也能让 SSL 证书自动续期
linux·服务器·网络协议·https·ssl
SelectDB技术团队26 分钟前
VARIANT 列接入网关 JSON 日志:建表、导入、子列查询与物化的完整步骤
大数据·数据库·人工智能·elasticsearch·搜索引擎·json·apache doris
zxanz129 分钟前
泛域名 SSL 证书怎么申请?需要准备什么?
网络·网络协议·ssl
事圆则缓1 小时前
Android 中的 Socket 和 WebSocket:从一条聊天消息看清区别
android·websocket·网络协议
.Hypocritical.3 小时前
计算机网络】吃透 OSI 七层模型与 TCP/IP 协议栈
网络协议·tcp/ip·计算机网络
夜雪一千3 小时前
MySQL中修改JSON类型的数据实战
数据库·mysql·json
承渊政道4 小时前
【Python编程—从入门到实践】(让程序记得、恢复并解释失败:Python 文件、异常与JSON系统教程)
开发语言·python·pycharm·json·异常处理
夜雪一千5 小时前
MySQL 中查询和操作JSON类型的数据
数据库·mysql·json
Lzg_na15 小时前
ARP 地址解析协议详解
网络·网络协议
北京盛世宏博16 小时前
通信异常深度排查:以太网温湿度设备 TCP 粘包、UDP 丢包根治方案
单片机·网络协议·tcp/ip·udp·以太网·传感器·温湿度