在ZeroMQ中为多部分或不部分

时间:2012-07-18 10:43:00

标签: zeromq

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

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

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

这两个选项中的任何一个都优于另一个吗?阅读The ZeroMQ Guide,其中chapter on Advanced Request-Reply patterns大量使用多部分邮件信封。这是否意味着作为用户,我应该尝试坚持使用单个消息来启用更高级的消息模式?

2 个答案:

答案 0 :(得分:2)

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

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

你的两个领域的案例是如此微不足道,只要它有效,你就不会使用你所使用的格式。

答案 1 :(得分:1)

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

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

使用1帧与多帧之间的性能可以忽略不计。除非你每秒发送千兆比特,否则它不太可能是一个问题。与往常一样,在您“优化”并浪费大量时间之前测量您的具体情况的基准测试&努力为每条消息节省200纳秒。