gap

package
v0.3.68 Latest Latest
Warning

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

Go to latest
Published: Aug 14, 2026 License: LGPL-2.1 Imports: 13 Imported by: 3

Documentation

Overview

Package gap 定义 Golaxy 应用层协议(Golaxy Application Protocol)。

GAP 运行在 GTP 或消息队列之上,负责承载应用层消息,适合服务到服务、 服务到客户端、以及路由转发等通信场景。当前包提供:

  • 统一的消息接口、消息头和消息创建器
  • Forward、RPC 请求/响应、单向 RPC 等基础消息模型
  • 序列化与反序列化入口
  • 配套的 codec 与 variant 子包,用于编解码和动态类型参数传输

当需要在稳定传输层之上表达业务消息、RPC 参数或可扩展载荷时,应优先使用 GAP。

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrGAP 是 GAP 消息处理错误的根错误。
	ErrGAP = errors.New("gap")
)
View Source
var (
	// ErrNotDeclared 表示指定消息 ID 尚未注册。
	ErrNotDeclared = fmt.Errorf("%w: msg not declared", ErrGAP)
)

Functions

func Marshal added in v0.1.36

func Marshal[T ReadableMsg](msg T) (ret binaryutil.Bytes, err error)

Marshal 编码消息并返回池化字节缓冲区;调用方使用完后必须调用 Release。

func Unmarshal added in v0.1.36

func Unmarshal(msg Msg, data []byte) error

Unmarshal 从 data 解码消息;消息中的引用型字段可能直接引用 data。

Types

type IMsgCreator

type IMsgCreator interface {
	// Declare 注册消息指针的具体类型;重复 ID 会 panic。
	Declare(msg Msg)
	// New 创建指定消息 ID 对应的新消息指针。
	New(msgId MsgId) (Msg, error)
}

IMsgCreator 按消息 ID 注册并构造 GAP 消息。

func DefaultMsgCreator

func DefaultMsgCreator() IMsgCreator

DefaultMsgCreator 返回已注册内置消息的进程级消息构建器。

func NewMsgCreator

func NewMsgCreator() IMsgCreator

NewMsgCreator 创建空的并发安全消息构建器。

type Msg

type Msg interface {
	ReadableMsg
	io.Writer
}

Msg 表示既可编码也可从字节流解码的 GAP 消息。

type MsgForward added in v0.1.32

type MsgForward struct {
	Src       Origin // 原始消息来源。
	Dst       string // 目标通信地址。
	CorrId    int64  // 请求关联 ID;无需关联时为零。
	TransId   MsgId  // 被转发消息的类型 ID。
	TransData []byte // 被转发消息的已编码内容;解码时引用输入缓冲区。
}

MsgForward 将一个已编码 GAP 消息路由到目标地址。

func (MsgForward) MsgId added in v0.1.32

func (MsgForward) MsgId() MsgId

MsgId 返回转发消息的内置类型 ID。

func (MsgForward) Read added in v0.1.32

func (m MsgForward) Read(p []byte) (int, error)

Read 将转发消息编码到 p。

func (MsgForward) Size added in v0.1.32

func (m MsgForward) Size() int

Size 返回转发消息编码后的字节数。

func (*MsgForward) Write added in v0.1.32

func (m *MsgForward) Write(p []byte) (int, error)

Write 从 p 解码转发消息。

type MsgHead

type MsgHead struct {
	Len   uint32 // 完整消息包的字节数。
	MsgId MsgId  // 消息类型 ID。
	Src   Origin // 消息来源。
	Seq   int64  // 发送方分配的序号。
}

MsgHead 是每个 GAP 消息包的公共头部。

func (MsgHead) Read

func (m MsgHead) Read(p []byte) (int, error)

Read 将消息头编码到 p。

func (MsgHead) Size

func (m MsgHead) Size() int

Size 返回消息头编码后的字节数。

func (*MsgHead) Write

func (m *MsgHead) Write(p []byte) (int, error)

Write 从 p 解码消息头。

type MsgId

type MsgId = uint32

MsgId 标识 GAP 消息类型。

const (
	// MsgId_None 表示未设置消息类型。
	MsgId_None MsgId = iota
	// MsgId_RPC_Request 标识需要响应的 RPC 请求。
	MsgId_RPC_Request
	// MsgId_RPC_Reply 标识 RPC 响应。
	MsgId_RPC_Reply
	// MsgId_OnewayRPC 标识无需响应的 RPC 通知。
	MsgId_OnewayRPC
	// MsgId_Forward 标识封装其他消息的路由转发消息。
	MsgId_Forward
	// MsgId_Customize 是自定义消息 ID 的起始偏移。
	MsgId_Customize = 32
)

func GenMsgId added in v0.3.68

func GenMsgId(msg Msg) MsgId

GenMsgId 根据具名消息类型的完整名称生成自定义消息 ID。

func GenMsgIdT added in v0.3.68

func GenMsgIdT[T any]() MsgId

GenMsgIdT 根据具名类型 T 的完整名称生成自定义消息 ID;*T 必须实现 Msg。

type MsgOnewayRPC added in v0.2.38

type MsgOnewayRPC struct {
	CallChain variant.CallChain // 调用来源链。
	Path      []byte            // 已编码调用路径;解码时引用输入缓冲区。
	Args      variant.Array     // 调用参数。
}

MsgOnewayRPC 表示无需响应的 RPC 通知。

func (MsgOnewayRPC) MsgId added in v0.2.38

func (MsgOnewayRPC) MsgId() MsgId

MsgId 返回单向 RPC 消息的内置类型 ID。

func (MsgOnewayRPC) Read added in v0.2.38

func (m MsgOnewayRPC) Read(p []byte) (int, error)

Read 将 RPC 通知编码到 p。

func (MsgOnewayRPC) Size added in v0.2.38

func (m MsgOnewayRPC) Size() int

Size 返回 RPC 通知编码后的字节数。

func (*MsgOnewayRPC) Write added in v0.2.38

func (m *MsgOnewayRPC) Write(p []byte) (int, error)

Write 从 p 解码 RPC 通知。

type MsgPacket

type MsgPacket struct {
	Head MsgHead     // 消息头。
	Body ReadableMsg // 消息体;nil 表示只有消息头。
}

MsgPacket 组合 GAP 消息头和消息体。

func (MsgPacket) Read

func (mp MsgPacket) Read(p []byte) (int, error)

Read 将完整消息包编码到 p。

func (MsgPacket) Size

func (mp MsgPacket) Size() int

Size 返回完整消息包编码后的字节数。

type MsgRPCReply

type MsgRPCReply struct {
	CorrId int64         // 对应请求的关联 ID。
	Rets   variant.Array // 调用返回值。
	Error  variant.Error // 调用错误;OK 为 true 时表示成功。
}

MsgRPCReply 表示 RPC 请求的响应。

func (MsgRPCReply) MsgId

func (MsgRPCReply) MsgId() MsgId

MsgId 返回 RPC 响应的内置类型 ID。

func (MsgRPCReply) Read

func (m MsgRPCReply) Read(p []byte) (int, error)

Read 将 RPC 响应编码到 p。

func (MsgRPCReply) Size

func (m MsgRPCReply) Size() int

Size 返回 RPC 响应编码后的字节数。

func (*MsgRPCReply) Write

func (m *MsgRPCReply) Write(p []byte) (int, error)

Write 从 p 解码 RPC 响应。

type MsgRPCRequest

type MsgRPCRequest struct {
	CorrId    int64             // 用于匹配响应与 Future 的关联 ID。
	CallChain variant.CallChain // 调用来源链。
	Path      []byte            // 已编码调用路径;解码时引用输入缓冲区。
	Args      variant.Array     // 调用参数。
}

MsgRPCRequest 表示需要响应的 RPC 请求。

func (MsgRPCRequest) MsgId

func (MsgRPCRequest) MsgId() MsgId

MsgId 返回 RPC 请求的内置类型 ID。

func (MsgRPCRequest) Read

func (m MsgRPCRequest) Read(p []byte) (int, error)

Read 将 RPC 请求编码到 p。

func (MsgRPCRequest) Size

func (m MsgRPCRequest) Size() int

Size 返回 RPC 请求编码后的字节数。

func (*MsgRPCRequest) Write

func (m *MsgRPCRequest) Write(p []byte) (int, error)

Write 从 p 解码 RPC 请求。

type Origin added in v0.3.14

type Origin struct {
	Svc       string // 来源服务名。
	Addr      string // 来源通信地址。
	Timestamp int64  // 来源 Unix 毫秒时间戳。
}

Origin 描述消息最初产生的服务、地址和时间。

func (Origin) Read added in v0.3.14

func (o Origin) Read(p []byte) (int, error)

Read 将来源信息编码到 p。

func (Origin) Size added in v0.3.14

func (o Origin) Size() int

Size 返回来源信息编码后的字节数。

func (*Origin) Write added in v0.3.14

func (o *Origin) Write(p []byte) (int, error)

Write 从 p 解码来源信息。

type ReadableMsg added in v0.3.59

type ReadableMsg interface {
	io.Reader
	// Size 返回消息编码后的字节数。
	Size() int
	// MsgId 返回消息类型 ID。
	MsgId() MsgId
}

ReadableMsg 表示可编码到字节流的 GAP 消息。

type SerializedMsg added in v0.2.17

type SerializedMsg struct {
	Id   MsgId  // 消息类型 ID。
	Data []byte // 已编码消息体;由调用方维护其生命周期。
}

SerializedMsg 将已有字节切片作为 GAP 消息体发送,不复制 Data。

func (SerializedMsg) MsgId added in v0.2.17

func (m SerializedMsg) MsgId() MsgId

MsgId 返回消息类型 ID。

func (SerializedMsg) Read added in v0.2.17

func (m SerializedMsg) Read(p []byte) (int, error)

Read 将已编码消息体复制到 p。

func (SerializedMsg) Size added in v0.2.17

func (m SerializedMsg) Size() int

Size 返回已编码消息体的字节数。

Directories

Path Synopsis
Package codec 提供 GAP 消息包的编解码能力。
Package codec 提供 GAP 消息包的编解码能力。
Package variant 提供 GAP 消息和 RPC 负载使用的动态值模型。
Package variant 提供 GAP 消息和 RPC 负载使用的动态值模型。

Jump to

Keyboard shortcuts

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