一个C++实现消息分发功能架构设计的问题

javagang 2016-06-27 10:46:58
有一个系统,主要是消息分发,然后根据接收到的不同消息类型,构造响应报文,然后回报文。通常实现,我们做个消息分发器,根据收到的不同消息,写不同消息的处理回调函数,在回调函数里返回回报。
这个系统能否做成插件式的?整个消息的类型可能以后还会扩展,有更多新的类型加进来,并且消息回报的处理方式也可能不相同,这样可否我提供消息分发器,然后回报处理让使用者(客户)自己实现?
弄一个回调函数Map,根据请求消息不同的ID,调用不同的回掉函数指针;另一头,客户将回调函数数组进行赋值,赋值成自己实现的回调处理函数,编译成DLL,和整个消息分发器结合使用?

另一方面,还有种做法,做一个通用的消息处理函数负责消息的回报。不同的回报消息利用配置文件配置,配置的主要内容是告诉这个通用的处理函数,回报消息体里各个字段分别取自哪里(请求消息、数据库、Or另行计算得到等等)。

我个人觉得如果第一种方式能够实现的话,后续可以将该系统的开发交与客户,进行后续的多次开发,可以根据自己的需求定制,我们只需要将主程序(消息分发器)实现好并提供即可。第二种方式看似对于客户省事了,客户只需要配置新的消息配置文件即可,但是由于新业务的不确定性,想做通用的消息回报函数很困难,新的业务加进来,难免会调整或增加新的处理,修改现有函数。并且通过配置文件来做这个事,也增加了异常处理的工作量,引入各种异常导致程序崩溃的可能性大增。

大家有什么好的建议?多谢!
...全文
1124 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
javagang 2016-06-29
  • 打赏
  • 举报
回复
引用 2 楼 wangyaninglm 的回复:
不知道能不能参照现有的nginx服务器的相关模块来实现
能否详细探讨下?
iyomumx 2016-06-27
  • 打赏
  • 举报
回复
map -> 配置文件 函数指针 -> 命令行 DLL -> 可执行文件 参数/返回值 -> 管道或文件 各种 web server 的 CGI 就是这样的
shiter 2016-06-27
  • 打赏
  • 举报
回复
不知道能不能参照现有的nginx服务器的相关模块来实现

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧