C++ C++;消息传递系统的设计模式?
我的任务是实现一个用于实时模拟的消息传递系统。此系统中需要存在几种不同类型的消息传递对象,将来可能会添加更多。这些对象表示sim卡中玩家之间的主要通信方式。假设我完全理解自己的需求,则可以通过以下属性定义消息传递对象:C++ C++;消息传递系统的设计模式?,c++,language-agnostic,design-patterns,C++,Language Agnostic,Design Patterns,我的任务是实现一个用于实时模拟的消息传递系统。此系统中需要存在几种不同类型的消息传递对象,将来可能会添加更多。这些对象表示sim卡中玩家之间的主要通信方式。假设我完全理解自己的需求,则可以通过以下属性定义消息传递对象: 发送协议(玩家可以发送什么消息以及何时发送) 接收协议(玩家可以接收哪些消息以及多久接收一次) 消息格式(所发送数据的结构) 模拟代码目前只支持一种发送和接收协议以及一种消息格式。我的工作是使代码更具可扩展性,以便它能够支持将来对协议和消息结构的更改/添加。第一种方法是为每个
- 发送协议(玩家可以发送什么消息以及何时发送)
- 接收协议(玩家可以接收哪些消息以及多久接收一次)
- 消息格式(所发送数据的结构)
FooMessaging
到底是如何工作的,我就畏缩不前
我将用C++写这个,但我认为这更是一个一般的设计问题。这里有什么“标准”模式或最佳实践可以应用吗?好的,我想你是在从G开始做一个从A到Z的过程 首先,您的用例是什么?你想干什么?您正在构建什么样的“消息传递系统”?电子邮件?感应电动机?心灵感应 第二,您从这些用例中获得的领域是什么 现在,经过仔细考虑,你会发现为基础课做ABC很方便。考虑一下,做一个接口(虽然C++中的接口和ABC之间的区别不如其他语言的定义好)。在过去的20年中,基于继承的OO已经产生了很多问题,因此现在界面和聚合已经受到青睐。并不总是更好,但你应该首先想到它们 现在,告诉我与“协议”对应的物理对象是什么?您的意思是对消息流之类的东西进行建模吗?它是一种通讯媒介吗 特别是格式听起来可疑,如果不是立即出错的话:消息格式往往与协议紧密相关 基本上,先退后一点,告诉我们更多你想做什么 更新 啊哈。好吧,看,我们从中得到了很多帮助。首先,你指的是可用操作意义上的“协议”——一种完全合理的用法,但当你把它与TCP和UDP混淆时,就会产生混淆,就像我所做的那样 现在,也就是说,你确实至少有几个选择。在下文中,我使用术语“玩家”来表示sim卡中任何可以发送或接收消息的实体 这里的关键概念是围绕变化的轨迹和非功能需求进行设计。明显的变化轨迹是
- 在你的意义上,你可以有几个“协议”,如果你有多达三个,你应该计划总是有更多。如果你期望超过两个,那么计划你可以任意多个
- 您可以使用多种不同的方式格式化消息,例如,JSON、XML或YAML。再一次,如果你期望两个以上,计划你可以任意多个
- 您可以有几种传输机制。听上去,您至少可以使用UNIX域套接字×共享内存×命名管道,但我的直觉告诉我,您还可以选择本地和远程,这意味着您还可以选择UDP或TCP。肯定不止两个,计划扩展性
这方面的一个例子是带有可序列化接口的Java RMI,而不是使用Remote。我认为您应该看看。实际上,它是用java编写的,但是它也有C++客户端的选择,而且文档也很好。
干杯。我重新编写了我的问题,希望能让它更清楚。我不是在设计消息传递系统本身。相反,我正在寻找一种很好的方法,以便在将来添加新的发送/接收协议和消息格式。是的,在我们的例子中,消息格式确实与protoco不同