我正在用C ++设计自己的消息总线,它将作为基于组件的游戏的后端。消息总线将具有以下特征:
我的问题是:
存储此类信息的最佳容器是什么?这不仅限于标准C ++,因此只要容器是Windows和Linux之间的跨平台,就可以使用boost容器。
答案 0 :(得分:1)
<强>的std ::列表强>
列表的主要缺点是它们缺少随机访问,但这与消息队列无关。
答案 1 :(得分:0)
消息总线是一个复杂的事情,并不简单地归结为连接到总线的单个组件的消息队列的表示。
正如评论中所提到的,除了线程安全之外,std::queue<MessageType,std::list<MessageType> >
应该满足您的主要用例,但需要考虑更多的事情。
以下是来自EventQueue.h的线程安全队列实现的示例:STTCL。如果您将std::queue<__T__,std::list<__T__> >
作为STTCL_DEFAULT_DEQUEIMPL(__T__)
的值,则它应符合您的需求,包括特定项目的find()
操作。
根据您的应用程序的使用情况,您需要从各种消息传递模式中进行选择,以便分发和订阅某些类型的消息。
当我即将处理这些主题时,我发现EAI catalog of messaging patterns非常有用。
除此之外:始终(总是!!! 是!三个感叹号)离开消息有效负载来自运输!!
用于消息传递模式的值得注意的传输系统是0MQ,它为各种语言提供绑定。但其他可用于C ++实现(包括基于原始套接字的实现或s.th.,如boost::asio
)。
至于消息有效负载的设计,我发现Google Protocol Buffers对分布式系统(包括嵌入式系统)的所有要求最有用,最便携和灵活。