5

我正在设计一个与 ZeroMQ 对话的服务器应用程序。在不深入细节的情况下,服务器将存储和服务(来自查询请求)(eventid, eventstring)元组。

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

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

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

4

2 回答 2

2

指南中有一节讨论了序列化:

http://zguide.zeromq.org/page:all#Serializing-Your-Data

您有两个字段的情况是如此微不足道,只要它有效,IMO 无论您使用什么格式都无关紧要。

于 2012-11-21T06:29:30.987 回答
1

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

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

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

于 2012-07-18T11:52:39.620 回答