序列化/反序列化与原始数据缓冲区

时间:2010-06-28 18:08:01

标签: network-programming

问候,

我正在开发分布式pub-sub系统,预计会有最小的延迟。我现在必须在使用序列化/反序列化和原始数据缓冲区之间进行选择。我更喜欢原始数据方法,因为几乎没有开销,这使得延迟保持较低。但是我的同事辩称我应该使用编组,因为解析器不那么复杂和冗长。我表达了对延迟的关注,但他表示从长远来看这将是值得的,甚至还有FPGA设备可以加速。

您对此有何看法?

TIA!

1 个答案:

答案 0 :(得分:0)

使用“原始数据”方法,如果使用一种语言对一个平台进行硬编码,当您尝试使用另一种语言在另一个平台上编写代码时(或者有时甚至是针对不同编译器的相同语言/平台)会出现一些问题,如果你的字段没有自然对齐)。

我建议使用IDL来描述您的邮件格式。如果您选择一个可以用您选择的语言简化为“原始数据”的代码,那么生成的代码用于访问该语言的消息字段除了访问存储器覆盖在数据缓冲区中的结构中的变量之外什么都不做,它仍然以平台和语言中立的方式表示元数据,因此解析器可以为其他平台制作更复杂的代码。

选择可缩减为C结构叠加层的东西的缺点是它不处理可选字段,并且不处理可变长度数组,并且可能在将来不能处理向后兼容的扩展(除非你只是在结构的最后加上它们。如果你还没有,我建议你阅读google's protocol buffers