为了账号安全,请及时绑定邮箱和手机立即绑定

越过电线。

越过电线。

Go
慕无忌1623718 2021-10-18 15:12:55
我正在考虑使用 gob ("encoding/gob") 在网络协议中序列化数据,我一直在四处寻找,似乎无法找到解决这些问题的任何方法:消息帧 - gob 文档给人的印象是您可以简单地将 TCP 连接包装在 gob 解码器中并阅读。但是如果你只收到一半的消息会发生什么?gob 能否以某种方式处理这个问题,还是我被迫添加一个消息帧并将消息数据复制到缓冲区中以便 gob 进行反序列化?不同类型的消息 - 协议具有不同类型的消息,如何最好地处理 gob?通过在每个 gob blob 之前有一个标识符来指示数据的类型?通过将所有消息放入包含所有不同消息的字段的“主”消息中(将其减少为仅一种类型的消息)?我尝试了后者(更简单),它似乎有一个巨大的开销(> 650 字节)。
查看完整描述

1 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

gob 文档给人的印象是您可以简单地将 TCP 连接包装在 gob 解码器中并阅读。

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

但是如果你只收到一半的消息会发生什么?

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

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

不同类型的消息

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

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


查看完整回答
反对 回复 2021-10-18
  • 1 回答
  • 0 关注
  • 227 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信