我目前参与开发使用分布式计算来检测不同事件的软件。
当前的方法是:十几个线程同时在不同的(物理)计算机上运行。每个事件都有一个编号;每个线程将其检测到的事件广播给另一个线程,并从传入流中过滤相关事件。
我对此感到非常难过,因为它看起来很糟糕,难以维护,并且在系统升级时可能会导致性能问题。
所以我正在寻找一种灵活而优雅的方式来处理这个 IPC,我认为 Boost::Signals 似乎是一个不错的选择;但我没用过,想知道是否可以为网络通信提供封装。
我目前参与开发使用分布式计算来检测不同事件的软件。
当前的方法是:十几个线程同时在不同的(物理)计算机上运行。每个事件都有一个编号;每个线程将其检测到的事件广播给另一个线程,并从传入流中过滤相关事件。
我对此感到非常难过,因为它看起来很糟糕,难以维护,并且在系统升级时可能会导致性能问题。
所以我正在寻找一种灵活而优雅的方式来处理这个 IPC,我认为 Boost::Signals 似乎是一个不错的选择;但我没用过,想知道是否可以为网络通信提供封装。
由于我不知道任何解决方案可以做到这一点,除了 Open MPI,如果我必须这样做,我会首先使用Google 的协议缓冲区作为我的消息容器。有了它,我可以创建一个抽象的基本消息,其中包含源、目标、类型、id 等内容。然后,我将使用Boost ASIO在网络上分发这些消息,或者通过命名管道/环回来分发本地消息。也许,在每台物理计算机中,一个专门的进程可能只是为了分发而运行。每个线程向它注册它感兴趣的消息类型,以及它的命名管道被称为什么。此过程将知道所有其他服务的 IP。
如果您需要通过网络进行 IPC,那么 boost::signals 不会帮助您,至少不能完全靠它自己。
您可以尝试使用Open MPI。