go实现tcp游戏服务器sibo——序列化及压缩篇

本文介绍了如何使用Go语言实现TCP游戏服务器Sibo的序列化和解压缩功能。针对序列化,文章详细讲解了8种不同方式,包括通用调用接口、原始二进制、JSON、Protobuf、Msgpack、Bson和Bson编解码。对于解压缩,文章涵盖了通用接口、默认无压缩、gzip和zip等四种方法。
摘要由CSDN通过智能技术生成

1. 序列化


上篇sibo协议的定制里其header部分包含了序列化类型及压缩类型的定义。
由于序列化为占用3个bit,因此最多可支持8种序列化方式。同理,压缩类型最多支持4种。

sibo协议定义支持的序列化类型如下(共5种):

const (
    SerializeNone SerializeType = iota  // 原始二进制
    JSON  
    ProtoBuffer //protobuf
    MsgPack 
    Bson 
)

接下来我们来实现这5中序列化方式:

1) 通用调用接口

type Codec interface {
    Encode(i interface{})([]byte, error)
    Decode(data []byte, i interface{}) error
}

2) 原始二进制编解码

// ByteCodec uses original bytes.
// 原始二进制编解码
type ByteCodec struct {}

func (c ByteCodec) Encode(i interface{}) ([]byte, error) {
    if data, ok := i.([]byte); ok {
        return data, nil
    }
    return nil, fmt.Errorf("%T is not a []byte", i)
}

func (c ByteCodec) Decode(data []byte, i interface{}) error {
    if _,ok:=i.([]byte);!ok {
        return errors.New("i is not type of []byte")
    }
    reflect.ValueOf(i).SetBytes(data)
    return nil
}

3) JSON编解码

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值