美文网首页
根据消息名称解析protobuf格式

根据消息名称解析protobuf格式

作者: fzhyzamt | 来源:发表于2019-10-30 11:23 被阅读0次

最近在解析一个网站的websocket时,发现使用的是protobuf,每个消息都使用一个统一的Wrapper封装,wrapper中包含有这条消息的pb名字以及对应的实际数据,这样就可以同时在同步通讯和通知中解析不同类型的消息了。

# 原格式
"Wrapper": {
    "fields": {
        "data": {
            "id": 2,
            "type": "bytes"
        },
        "name": {
            "id": 1,
            "type": "string"
        }
    }
}
# 转换为.proto
type Wrapper struct {
    Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
    Data                 []byte   `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
    XXX_NoUnkeyedLiteral struct{} `json:"-"`
    XXX_unrecognized     []byte   `json:"-"`
    XXX_sizecache        int32    `json:"-"`
}
未解码的Message
其中.lq.RecordDealTile为pb中的消息名称,那么只需要对每个消息根据名称实例化对应的消息就可以了。
golang中语言级别是没有遍历包下所有类型的方法的,不过好在protobuf解决了这个问题,在生成的.pb.go中我们可以看到,每个类型都被注册到了proto中,我们需要使用的时候直接去获取就可以了。
liqi.pb.go
首先进行解码
func unWrap(b []byte) (s string, data []byte, err error) {
    wrapper := lq.Wrapper{}
    if err := wrapper.XXX_Unmarshal(b); err != nil {
        fmt.Println("UnWrapper fail", err)
        return "", nil, err
    }
    return wrapper.Name, wrapper.Data, nil
}

在解析数据时,直接使用proto.MessageType(name)即可获得对应的消息类型。

fmt.Println(proto.MessageType(name))
> *lq.RecordDiscardTile

相关文章

  • 根据消息名称解析protobuf格式

    最近在解析一个网站的websocket时,发现使用的是protobuf,每个消息都使用一个统一的Wrapper封装...

  • iOS9和iOS10推送区别

    收到消息数据格式区别 要根据具体数据格式进行解析,以适配iOS10+。 收到远程推送消息几种情况处理 前台接收消息...

  • how to use protobuf Reflection?

    最近工作中,需要做一些消息动态解析,因为使用的 protobuf,考虑使用protobuf的反射特性。 1 ref...

  • Protobuf数据格式解析

    Protobuf是Google开源的一款类似于Json,XML数据交换格式,其内部数据是纯二进制格式,不依赖于语言...

  • 第七章 网络

    传输数据格式更改,使用Protobuf(二进制格式,有点:数据量小、易解析),问题是使用抓包工具排查问题时是否易排...

  • protobuf在iOS中接入

    前言 现在主流的还是json这种格式,易读,解析没有任何难度.protobuf具有序列化和反序列化速度快,占用空间...

  • Protobuf语法

    在protobuf中,协议是由一系列的消息组成的。因此最重要的就是定义通信时使用到的消息格式。 一个Protobu...

  • Protobuf 更新原有消息格式注意事项

    如果一个已有的消息格式已无法满足新的需求,比如:要在消息中添加一个额外的字段——但是同时旧版本写的代码仍然可用。更...

  • 深入 ProtoBuf - 序列化源码解析

    在上一篇 深入 ProtoBuf - 编码 中,我们详细解析了 ProtoBuf 的编码原理。 有了这个知识储备,...

  • google的protobuf使用

    针对数据解析,个人觉得json,xml等比protobuf 效率低,最近看了下goole的protobuf,发现c...

网友评论

      本文标题:根据消息名称解析protobuf格式

      本文链接:https://www.haomeiwen.com/subject/hihovctx.html