我正在考虑使用gob(“encoding/gob”)来序列化网络协议(protocol)中的数据,我一直在搜索并且似乎找不到这些问题的任何解决方案:

消息框架-gob文档给人的印象是,您可以简单地将TCP连接包装在gob解码器中并读取。但是,如果您只收到一半的消息,会发生什么? gob可以以某种方式处理此问题吗?还是我被迫添加一个消息帧并将消息数据复制到缓冲区中,以便gob取消序列化?

不同类型的消息-协议(protocol)具有不同类型的消息,如何使用gob最佳处理?通过在每个gob blob之前都有一个标识符来指示数据类型?通过将所有消息放入包含所有不同消息的字段的“主”消息中(将其简化为仅一种类型的消息)?
我尝试了后者(更简单),它似乎有巨大的开销(> 650字节)。

最佳答案



正确的。该程序包旨在在编码器和解码器之间流传输多个值。



解码器调用基础io.Reader来获取数据。如果读取器无法返回数据,则读取器将返回错误。解码器将此错误返回给应用程序。

如果io.Reader返回错误,则无法恢复解码流。



您可以对消息进行编码,第一个消息告诉应用程序第二个消息的类型。

您还可以按照您的描述创建“主”类型。您看到的开销是每个流一次,而不是每个值一次。

09-18 22:25