客户端接入网关设计
客户端接入网关,上游对接PC客户端,下游对接消息总线和数据管理服务器,主要由如下功能:
2. 体系结构
2.1 逻辑架构功能模块
2.2 功能模块
客户端接入网关由四个模块组成:
(a)客户端通讯消息处理模块。
(b)数据管理通讯消息处理模块。
(c)消息总线通讯消息处理模块。
(d)订阅管理推送模块。
- 客户端消息处理模块
- 功能说明
- 负责客户端连接回话管理。
- 客户端消息响应处理。
对消息进行协议转换(例如json协议转换成protobuf协议),转发到对应服务器处理。
DataPackConvertProtoUtils功能类负责将json协议转换成对应的protobuf协议格式。
客户端消息处理器
客户端会话管理
//请求处理回调函数声明
using MsgHandlerCB = std::function<void(net::task_from_cli_sptr& task)>;
using MsgHandlerCBMap = std::map<int, MsgHandlerCB> ;
#define ON_MSG_CALLBACK(msg_id, cb) \
msg_id_cb_map_[msg_id] = std::bind(&cb, this, std::placeholders::_1)
每新增加一个消息,如果需要特殊处理,需要在RegisterMsgHandleCallback注册一个消息处理函数。否则,调用缺省消息处理函数onMsgCommonTask。
- 数据管理消息处理模块
对数据管理服务器消息响应处理,并将数据管理服务器的应答消息转发到客户端。
目前所有数据查询直接走数据管理服务器,避免大流量查询占用消息总线的带宽,影响正常的交易,提交系统性能。
-
- 结构图
数据管理消息处理器
//请求处理回调函数声明
using MsgRspHandlerCB = std::function<void(net::task_from_srv_sptr& task)>;
using MsgRspHandlerCBMap = std::map<int, MsgRspHandlerCB>;
#define ON_MSG_RSP_CALLBACK(msg_id, cb) \
msg_id_rsp_cb_map_[msg_id] = std::bind(&cb, this, std::placeholders::_1)
每新增加一个消息,如果需要特殊处理,需要在RegisterMsgHandleCallback注册一个消息处理函数。否则,调用缺省消息处理函数onMsgCommonTask。
- 消息总线消息处理模块
- 功能说明
(1)消息总线消息响应处理。
对消息进行协议转换(例如protobuf协议转换成json协议格式)。如果是请求消息应答消息,根据会话管理信息,转发应答消息给客户端。如果是推送消息,调用订阅推送管理,将消息推送给订阅改消息的用户。
(2)ProtoConvertDataPackUtils功能类负责将protobuf协议转换成对应的json协议格式。
-
- 结构图
消息总线消息处理器
MsgPushMgr负责消息推送给订阅的用户
MsgSubMgr 负责管理消息的订阅
SessionMgr 负责客户端会话管理
-
- 接口
//请求处理回调函数声明
using MsgRspHandlerCB = std::function<void(net::task_from_srv_sptr& task)>;
using MsgRspHandlerCBMap = std::map<int, MsgRspHandlerCB>;
#define ON_MSG_RSP_CALLBACK(msg_id, cb) \
msg_id_rsp_cb_map_[msg_id] = std::bind(&cb, this, std::placeholders::_1)每新增加一个消息,如果需要特殊处理,需要在RegisterMsgHandleCallback注册一个消息处理函数。否则,调用缺省消息处理函数onMsgCommonTask。
- 其他