golang miniate packet 数据报文格式(3)

1.需求

  • 尽量小的数据包
  • 自动压缩路由,用int替代string
  • 数据包分成2部分,一部分(packet)给框架用,另一部分(message)给业务用
  • 数据包中包含请求类型
  • 支持多种格式的数据解析
  • 如果数据格式是json,protobuf可以上传object name

2.报文协议

packet

packet.body(message)

packet.body

  • 报文分为2部分,packet和message

  • packet

    • head

      5bytes

      • type

        1byte

        • Handshake = 0x01 客户端握手请求
        • HandshakeAck = 0x02 服务器握手ack
        • Heartbeat = 0x03 心跳
        • Data = 0x04 数据包
        • Kick = 0x05 客户端下线
      • len

        3bytes,body的长度

      • subpackage

        1byte,分包,但是没实现

    • body

      range 0-64kb

      二进制数据

    • message

      就是body

      • head

        range 1- xx bytes

        • flag

          • empty

            2bit

          • message type

            3bits

            // Message types
            // s: server
            // c: client
            // who can send message type
            Request  Type = 0x00 // c
            Push          = 0x01 // c
            Response      = 0x02 // s
            Notify        = 0x03 // s
            Ack           = 0x04 // s
            
          • route

            1bit,是否压缩路由

          • date type

            2bits

        • len

          1byte,message id的长度

        • message id

          range 0-8bytes,uint64类型

        • len

          1byte,route的长度

        • route

          路由的内容,如果是字符串,它就是没有压缩的路由,如果是数字它就是压缩路由

        • len

          1byte,obj name的长度

        • obj name

          range 0-256bytes

          后面data里存的对象的名字

      • data

        range 0-约60kb

3.使用

  • 具体案例看minigate/component/codec/message/message_test.go

源码地址,未经允许禁止转载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值