NanoMsg (NNG) 和 FlatBuffers 是否适合这个项目?

NanoMsg (NNG) & FlatBuffers the correct fit for this project?

如果有更好的我们应该考虑,请大声说出来:

我正在寻找一种非常快速和简单的方法来获取多个程序(例如 5 个)- 每个 运行 在私有 OpenStack 云上的不同节点上相互通信。

这是我的第一个想法。但是如果你有别的东西可以提供。大声喊出来。

UDP 套接字层的友好包装器:

Encoder/Decoder 对于 C++ 结构数据:

非常尊重玛格丽特·汉密尔顿为阿波罗计划所做的工作。

Yell out.

亲爱的博士,
上面 shopping-list 中没有提到的许多功能对于做出专业决定很重要。

如果 Apollo AGC 示例可以帮助到这里,那就更好了。

正在寻找的包:

  • 应该让您的代码控制相对 processing-priorities,
  • 应该增加/减少/映射 IO-threads resources-pool 每个通道的使用情况,
  • 应该设置 L3+ 传输 ToS-prioritisation 标记,
  • 应该修改O/S 配置的 L3/L2 堆栈实现资源,
  • 应该允许 non-blocking 从应用程序端进行控制,没有任何死锁的风险,
  • 应该提供广泛的 transport-classes 产品组合,涵盖 { inproc: |工业电脑: | tipc: | TCP: |开发计划署: |虚拟机:| PGM: | epgm: } 根据需要加入混音

如果这一切听起来对你在 Draper Lab 的进一步努力很重要,那么 ZeroMQ 将顺利融入(如果某些延迟/性能数据可能需要在类固醇上得到提升,因为它比上面的成熟组合更重要,也可能喜欢回顾 Martin Sustrik 的另一个孩子,比他的 ZeroMQ 更年轻—— 工具)。


无论如何,如果你确实有 (cit.)...大量的循环和内存...”,只是让我进来,我有很多TFLOP-s要处理,如果你允许的话,在空闲时间:o)


诺塔贝内:

鉴于最近的评论,让我对使用海军研究实验室发表的 NACK-Oriented 可靠多播 (NORM) norm:// transport-class,这可能有助于您纯粹的 PUB/SUB-设计意图,为此它似乎可以解决 不想丢失消息[=57”的愿望=]”,根据 Zen-of-Zero,将所有此类操作留给 user-side 应用程序代码和 行为。

对于序列化,几乎任何具有正确语言绑定的东西都可以。 Google Protocol Buffers 与语言无关,有很多可用的绑定。唯一要避免的是你的源代码中内置的序列化(就像 Boost 的序列化是/曾经是),因为那样你就不能轻易地将它移植到另一种语言。

对于消息传输,ZeroMQ、NanoMsg 都是不错的选择。但是,我认为这真的归结为

  1. 您多么不想丢失消息,
  2. 首先 "lost message" 正是您的意思。

关于 ZeroMQ(和 NanoMsg)的事情是(AFAIK)当发生故障时没有真正的方法知道消息的命运。例如,在 ZeroMQ 中,如果您发送一条消息,而接收方恰好正在工作并处于连接状态,则该消息将通过连接进行传输。发送端现在认为工作已经完成,消息已经传递。但是,除非并且直到接收端实际调用 zmq_recv() 并完全处理它收到的内容,否则如果接收端进程崩溃,出现电源故障等,消息仍然会丢失。这是因为直到它被消费后,消息存储在 ZeroMQ 运行 线程内的 RAM 中(在相应的 Context()-实例的控制域内)。

您可以通过让某种 ack 消息以另一种方式返回、超时等来解决这个问题。但这开始变得繁琐,您最好使用 RabbitMQ 之类的东西。