【问题标题】:building a custom communication protocol in C++ for a distributed system在 C++ 中为分布式系统构建自定义通信协议
【发布时间】:2014-08-27 16:44:57
【问题描述】:

我需要在分布式系统中构建自定义通信协议。各个节点上的逻辑是用 C++ 实现的。

在我过去的经验中,当我不得不用 Java 做这件事时,我依赖于 Netty。 C++ 中是否有类似的框架/库允许我实现自己的自定义协议?

我简短地看了ZeroMQ。但是,在我发现的文档中似乎过分强调使用预定义的模式,例如 REQ/REPPUB strong>/SUBZeroMQ 上是否有更基础的层 不会强迫我使用这些模式,但仍然提供是否有足够的支持来实现自定义通信协议?

如果有其他更适合的库(听说过Boost.Asio),那么也欢迎。

【问题讨论】:

  • Asio 很棒,但是它运行在套接字层,它没有实现更高级别的协议。如果你没问题,试试 Asio。
  • 不是适合您的解决方案,但您提到的模式 ZMQ 的基础层,您可以使用这些工具构建您想要的通信模式......实际上完成此类任务的一种非常强大的方法,但您必须理解并接受它,如果您已经拥有需要更基本方法的架构,那么它可能不适合您。
  • nanomsg 具有用于编写协议的紧凑接口。我为我的需要编写了 PUB/SUB 和 BUS 的融合。您可以阅读详情here

标签: c++ networking boost netty zeromq


【解决方案1】:

ZeroMQnanomsg 框架(作为很酷的无代理工具)使您成为出色的消息传递 IO 层,您可能会忘记它们的智能内部。

你可以自己做任何协议抽象。

如果你有印象,PUB/SUB 是 ZeroMQ 的焦点,你似乎错过了他们最大的力量。

您是否有机会阅读 Pieters Hinjens 的任何一本关于零复制、零能耗、零共享、零延迟背后的高级设计原则的书;o)?

值得花时间。 [包括更多宝石。]

非常面向协议的设计方法可能对您的own-protocol-FSA 设计和验证有很大帮助,如果您努力实现专业级、多线程、异构、分布式、可扩展、自我修复、快速、低延迟的正式通信模式。

【讨论】:

  • 我对Netty最为熟悉,能否从Netty的特性方面来解释一下ZeroMQ?他们的水平是否相同?
  • 特别是,如果我想在 ZeromQ 上实现类似 Spdy 的自定义双向双工协议,这可能吗?
  • @ajay 如果可以为她/他的协议定义一个完整的(分布式的)有限状态自动机,ZeroMQ/nanomsg 将不会费心无缝地承载 IO。正如所观察到的,大多数错误概念都在 FSA 设计方面,而不是在通信/消息传递层。曾经被要求“..用 Netty 特性解释 ZeroMQ?” 请原谅我敢答应任何人用摩尔斯电码字母表中使用的术语解释法语发音中的美味佳肴。抽象思维的世界(并且设计原则非常抽象)根本无法以这种方式工作。 可怜,但真实。
  • 你指的是彼得的哪本书?他写过几本关于 ZeroMQ 的书?
【解决方案2】:

您可能想研究像 CORBA(许多不同的代理可用,但我不建议使用它)、ZeroC 的 ICE、Google 的 Protocol Buffers、SOAP 甚至 RPC 之类的中间件。使用一种或另一种有不同的优点和缺点,但我建议使用现有的中间件,而不是开发自己的中间件。您可以从这里开始middleware on wikipedia,然后决定哪一个更适合您的需求。

【讨论】:

  • ProtocolBuffer 是数据协议,不是通信协议框架。我想你错过了我的问题。
猜你喜欢
  • 2018-08-27
  • 1970-01-01
  • 2014-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
  • 2016-11-23
  • 2012-08-05
相关资源
最近更新 更多