在ZeroMQ中为多部分或不部分

Zty*_*tyx 5 zeromq

我正在设计一个能与ZeroMQ交谈的服务器应用程序.在不深入细节的情况下,服务器将存储并提供(来自查询请求)(eventid, eventstring)元组.

我的问题涉及电线协议的设计.我想将我的元组从一端发送到另一端.我看到两个选择:

  • 序列化我的元组(使用protobuf或其他)并将其作为单个消息发送.
  • 将我的元组作为多部分消息发送; 第一部分包含eventid,第二部分包含eventstring.

这两种选择中的任何一种都优于另一种吗?阅读ZeroMQ指南,有一章关于高级请求 - 回复模式,它们大量使用多部分消息包络.这是否意味着我作为用户应该尝试坚持单个消息以在将来启用更高级的消息模式?

小智 1

我建议查看Majordomo 协议的有线协议。您可以从该示例中看到,结构中的每个“字段”都作为单独的帧发送。这工作得很好并且得到了很好的支持。

您还可以定义字节布局并将数据作为单个帧发送。您将需要处理任何字节序问题(如果您在小字节序和大字节序的平台上运行代码),但这相当容易处理。如果您不知道如何操作,请使用像Majordomo 这样的框架技术。

使用 1 帧与使用多帧之间的性能差异可以忽略不计。除非您每秒发送千兆位数据,否则这不太可能成为问题。与往常一样,在“优化”之前先进行基准测试来衡量您的具体情况,并浪费大量时间和精力来为每条消息节省 200 纳秒。