protocol

package
v0.5.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 10, 2023 License: MIT Imports: 6 Imported by: 0

README

Header长度为9个字节,后面8个字节为8个字节的uint64

除了这个,还需要保存此次成功还是失败的 statusType 和 序列化类型 serializeType

  • statusType 有两种状态,只需要一个bit
  • serializeType 有4种类型,需要两个bit

一个字节有8个bit,所以我们可以用一个字节表示,减少存储空间

我们假设 一个byte的最后一个字节为 statusType

  • get:我们只需要获取最后一个字节,忽略前面7个字节,也就是说与 0000 0001(16进制就是 0x01)进行&运算,最后一个字节为0就是0,为1就是1
  • set:先把最后一位清零byte &^ 0x01, 再获取要设置的最后一个bit byte & 0x01, 最后再进行一次|(或)运算

倒数2 3字节为 serializeType

  • get:同理,与 0000 0110(16进制就是 0x06)进行&运算,但是由于设置的是2 3字节,还需要>> 左移1位
  • set:同理,清零倒数2 3字节,获取 2 3字节,获取bit时要先右移

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func FreeMsg added in v0.5.0

func FreeMsg(msg *Message)

FreeMsg puts a msg into the pool.

func PutData added in v0.5.0

func PutData(data *[]byte)

func SliceByteToString

func SliceByteToString(b []byte) string

func StringToSliceByte

func StringToSliceByte(s string) []byte

Types

type Header [headerLen]byte

func (*Header) MessageStatusType

func (h *Header) MessageStatusType() MessageStatusType

MessageStatusType returns the message status type.

func (*Header) Seq

func (h *Header) Seq() uint64

Seq returns sequence number of messages.

func (*Header) SerializeType

func (h *Header) SerializeType() SerializeType

SerializeType returns serialization type of payload.

func (*Header) SetMessageStatusType

func (h *Header) SetMessageStatusType(mt MessageStatusType)

SetMessageStatusType sets message status type.

func (*Header) SetSeq

func (h *Header) SetSeq(seq uint64)

SetSeq set sequence number.

func (*Header) SetSerializeType

func (h *Header) SetSerializeType(st SerializeType)

SetSerializeType sets the serialization type.

type Message

type Message struct {
	*Header
	ServicePath   string
	ServiceMethod string
	Payload       []byte
	// contains filtered or unexported fields
}

func GetPooledMsg added in v0.5.0

func GetPooledMsg() *Message

GetPooledMsg gets a pooled message.

func NewMessage

func NewMessage() *Message

func (*Message) Clone

func (m *Message) Clone() *Message

func (*Message) Decode

func (m *Message) Decode(r io.Reader) error

Decode 非线程安全

func (*Message) Encode

func (m *Message) Encode() *[]byte

func (*Message) Encode2 added in v0.5.0

func (m *Message) Encode2() []byte

func (*Message) Reset added in v0.5.0

func (m *Message) Reset()

Reset clean data of this message but keep allocated data

type MessageStatusType

type MessageStatusType byte

MessageStatusType is status of messages.

const (
	// Normal is normal requests and responses.
	Normal MessageStatusType = iota
	// Error indicates some errors occur.
	Error
)

type SerializeType

type SerializeType byte

SerializeType defines serialization type of payload.

const (
	// SerializeNone uses raw []byte and don't serialize/deserialize
	SerializeNone SerializeType = iota
	// JSON for payload.
	JSON
	// ProtoBuffer for payload.
	ProtoBuffer
	// MsgPack for payload
	MsgPack
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL