📢博客主页:https://blog.csdn.net/2301_779549673
📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 JohnKi 原创,首发于 CSDN🙉
📢未来很长,值得我们全力奔赴更美好的生活✨


文章目录
- 📢前言
- 🏳️🌈一、请求字段宏定义
- 🏳️🌈二、消息类型定义
- 🏳️🌈三、响应码类型定义
- 🏳️🌈四、响应码返回值
- 🏳️🌈五、Rpc请求类型
- 🏳️🌈六、主题操作类型定义
- 🏳️🌈七、服务操作类型定义
- 🏳️🌈八、整体代码
- 👥总结
📢前言
截至目前,有关 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框架】- 项目实现 - 项目消息类型字段信息定义篇 做了一个较为详细的介绍,不知道对你有没有帮助呢
觉得博主写得还不错的三连支持下吧!会继续努力的~
