msgparser

package
v0.4.5 Latest Latest
Warning

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

Go to latest
Published: Jan 4, 2023 License: MIT Imports: 15 Imported by: 0

Documentation

Index

Constants

View Source
const (
	UnmarshalBase     Action = 0x34 // 已经序列化基本信息, 但是还够不成一个完整的消息, 需要将消息提升到noReadyBuffer中
	UnmarshalComplete Action = 0x45 // 序列化完整消息完成

	// SingleRequest 数据在单次请求中被传完, 适合HTTP之类的协议, LMessageParser在遇到
	// 这个选项时会直接之间使用ParseMsg()传入的bytes来触发Unmarshal()
	// TCP之类的协议使用这个选项会引发半包之类的问题
	SingleRequest BaseLenType = 0x65
	// MultiRequest 数据在可能在多次请求中被传完, 适合TCP之类的协议
	MultiRequest BaseLenType = 0x76
)
View Source
const (
	DefaultBufferSize = 4096    // 4KB
	MaxBufferSize     = 1 << 20 // 1MB
	DefaultParser     = "lrpc-trait"
)

Variables

This section is empty.

Functions

func Register

func Register(scheme string, pf Factory)

func RegisterHandler

func RegisterHandler(handler MessageHandler)

Types

type Action

type Action int

type AllocTor

type AllocTor interface {
	AllocMessage() *message.Message
	FreeMessage(message *message.Message)
}

func NewDefaultSimpleAllocTor

func NewDefaultSimpleAllocTor() AllocTor

type BaseLenType

type BaseLenType int

type Factory

type Factory func(msgAllocator AllocTor, bufSize uint32) Parser

func Get

func Get(scheme string) Factory

type MessageHandler

type MessageHandler interface {
	Header() []byte
	BaseLen() (BaseLenType, int)
	MessageLength(base []byte) int
	Unmarshal(data []byte, msg *message.Message) (Action, error)
}

func GetHandler

func GetHandler(magicNumber uint8) MessageHandler

type Parser

type Parser interface {
	// Parse 处理数据的接口必须能够正确处理half-package
	// 也必须能处理有多个完整报文的数据, 在解析失败时返回对应的error
	Parse(data []byte) (msgs []ParserMessage, err error)
	// Free 用于释放Parse返回的数据, 在Parse返回error时这个过程
	// 绝对不能被调用
	Free(msg *message.Message)
	inters.Reset
}

Parser 解析器的所有接口的实现必须是线程安全/goroutine safe 否则则会出现data race/race conditions

func NewLRPCTrait

func NewLRPCTrait(allocTor AllocTor, bufSize uint32) Parser

type ParserMessage

type ParserMessage struct {
	Message *message.Message
	// 没有Header特征的协议可以选定一个固定的虚拟值, 由Parser返回
	// 再将这个固定的虚拟值注册到Writer中以找到对应的Writer
	Header byte
}

type SimpleAllocTor

type SimpleAllocTor struct {
	SharedPool *sync.Pool
}

func (*SimpleAllocTor) AllocMessage

func (s *SimpleAllocTor) AllocMessage() *message.Message

func (*SimpleAllocTor) FreeMessage

func (s *SimpleAllocTor) FreeMessage(message *message.Message)

Jump to

Keyboard shortcuts

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