gate

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: 39 Imported by: 4

Documentation

Overview

Package gate 提供构建在 GTP 传输栈之上的网关 add-in。

它为接收外部客户端连接的服务管理监听器、握手、会话以及会话级数据与 事件 I/O。

Index

Constants

This section is empty.

Variables

View Source
var (
	// AddIn 是 GTP 网关的服务级 add-in 安装入口。
	AddIn = define.ServiceAddIn(newGate)
)
View Source
var ClientDetails = &netpath.NodeDetails{
	DomainRoot:      netpath.Domain{Path: "cli", Sep: "."},
	DomainBroadcast: netpath.Domain{Path: "cli.bc", Sep: "."},
	DomainMulticast: netpath.Domain{Path: "cli.mc", Sep: "."},
	DomainUnicast:   netpath.Domain{Path: "cli.ep", Sep: "."},
}

ClientDetails 定义客户端广播、组播及单播地址的公共命名空间。 该值由所有 gate/router 实例共享,调用方应将其视为只读。

View Source
var With _GateOption

With 提供 gate add-in 的 Option 构造方法。

Functions

func DefaultWebSocketLocalAddrResolver added in v0.3.34

func DefaultWebSocketLocalAddrResolver(conn *websocket.Conn) net.Addr

DefaultWebSocketLocalAddrResolver 返回 WebSocket 底层连接的本地地址。

func DefaultWebSocketRemoteAddrResolver added in v0.3.34

func DefaultWebSocketRemoteAddrResolver(conn *websocket.Conn) net.Addr

DefaultWebSocketRemoteAddrResolver 优先从 X-Real-Ip、X-Forwarded-For 解析客户端 IP, 否则使用请求的 RemoteAddr。该实现不校验代理可信度;直接暴露公网时应自定义解析器。

Types

type Authenticator

type Authenticator = generic.Delegate5[IGate, net.Conn, string, string, []byte, error]

Authenticator 校验客户端提交的用户 ID、令牌和扩展数据;返回错误会拒绝连接。

type GateOptions

type GateOptions struct {
	TCPAddress                     string                 // TCPAddress 是 TCP 监听地址;空字符串禁用 TCP。
	TCPNoDelay                     *bool                  // TCPNoDelay 为 nil 时沿用系统默认值。
	TCPQuickAck                    *bool                  // TCPQuickAck 为 nil 时沿用系统默认值。
	TCPRecvBuf                     *int                   // TCPRecvBuf 是接收缓冲区字节数;nil 沿用系统默认值。
	TCPSendBuf                     *int                   // TCPSendBuf 是发送缓冲区字节数;nil 沿用系统默认值。
	TCPLinger                      *int                   // TCPLinger 是关闭等待秒数;nil 沿用系统默认值。
	TCPTLSConfig                   *tls.Config            // TCPTLSConfig 非 nil 时为 TCP 监听启用 TLS。
	WebSocketURL                   *url.URL               // WebSocketURL 是监听 URL;nil 禁用 WebSocket。
	WebSocketTLSConfig             *tls.Config            // WebSocketTLSConfig 用于 https/wss 监听。
	WebSocketLocalAddrResolver     WebSocketAddrResolver  // WebSocketLocalAddrResolver 解析服务端地址。
	WebSocketRemoteAddrResolver    WebSocketAddrResolver  // WebSocketRemoteAddrResolver 解析客户端地址。
	IOTimeout                      time.Duration          // IOTimeout 是单次网络 I/O 的超时。
	IORetryTimes                   int                    // IORetryTimes 是 I/O 超时后的重试次数。
	IOBufferCap                    int                    // IOBufferCap 是断线重连时保留的发送数据字节上限。
	MsgCreator                     gtp.IMsgCreator        // MsgCreator 用于按消息 ID 创建 GTP 解码目标。
	AgreeClientEncryptionProposal  bool                   // AgreeClientEncryptionProposal 允许采用客户端加密提案。
	EncCipherSuite                 gtp.CipherSuite        // EncCipherSuite 是服务端首选密码套件。
	EncNonceStep                   *big.Int               // EncNonceStep 是每次加解密后的 nonce 增量。
	EncECDHENamedCurve             gtp.NamedCurve         // EncECDHENamedCurve 是 ECDHE 密钥交换曲线。
	EncSignatureAlgorithm          gtp.SignatureAlgorithm // EncSignatureAlgorithm 是握手签名算法。
	EncSignaturePrivateKey         crypto.PrivateKey      // EncSignaturePrivateKey 是服务端握手签名私钥。
	EncVerifyClientSignature       bool                   // EncVerifyClientSignature 要求验证客户端握手签名。
	EncVerifySignaturePublicKey    crypto.PublicKey       // EncVerifySignaturePublicKey 是客户端签名验证公钥。
	AgreeClientCompressionProposal bool                   // AgreeClientCompressionProposal 允许采用客户端压缩提案。
	Compression                    gtp.Compression        // Compression 是服务端首选压缩算法。
	CompressionThreshold           int                    // CompressionThreshold 是启用压缩的字节阈值;小于等于 0 时禁用。
	MaxUncompressedSize            int                    // MaxUncompressedSize 限制解压后负载,防御压缩炸弹。
	MaxPacketSize                  int                    // MaxPacketSize 限制单个 GTP 包大小。
	AcceptTimeout                  time.Duration          // AcceptTimeout 是握手完成前的最长等待时间。
	Authenticator                  Authenticator          // Authenticator 校验客户端凭据;nil 表示不额外鉴权。
	SessionInactiveTimeout         time.Duration          // SessionInactiveTimeout 是断线后等待连接迁移的时间。
	SessionWatcherInboxSize        int                    // SessionWatcherInboxSize 是每个会话观察器的收件箱容量。
	SessionDataListenerInboxSize   int                    // SessionDataListenerInboxSize 是每个数据监听器的收件箱容量。
	SessionEventListenerInboxSize  int                    // SessionEventListenerInboxSize 是每个事件监听器的收件箱容量。
}

GateOptions 配置监听端点、GTP 协商、安全限制、会话及监听器容量。

type IDataIO added in v0.3.68

type IDataIO interface {
	// Send 复制 data 并将其加入发送队列。
	Send(data []byte) error
	// Listen 注册监听器,直到 ctx 取消或会话关闭。
	Listen(ctx context.Context, handler SessionDataHandler) error
}

IDataIO 提供会话原始负载的异步发送与监听。

type IEventIO added in v0.3.68

type IEventIO interface {
	// Send 将 event 加入发送队列;调用方须保证事件在处理完成前保持有效。
	Send(event transport.IEvent) error
	// Listen 注册监听器,直到 ctx 取消或会话关闭。
	Listen(ctx context.Context, handler SessionEventHandler) error
}

IEventIO 提供会话 GTP 事件的异步发送与监听。

type IGate

type IGate interface {
	// Get 按会话 ID 查询当前尚未过期的会话。
	Get(id uid.Id) (ISession, bool)
	// Count 返回当前会话数量。
	Count() int64
	// Watch 监听首次建立完成的会话;连接迁移成功不会重复通知。
	// 返回的 Signal 在 ctx 取消或 gate 停止后完成。
	Watch(ctx context.Context, handler SessionEstablishedHandler) (async.Signal, error)
}

IGate 提供已鉴权客户端会话的并发查询与建立监听能力。

type ISession

type ISession interface {
	context.Context
	fmt.Stringer
	// Id 返回服务端分配的会话 ID。
	Id() uid.Id
	// UserId 返回客户端提交的鉴权用户 ID。
	UserId() string
	// Token 返回客户端提交的鉴权令牌。
	Token() string
	// Extensions 返回客户端提交的鉴权扩展数据;调用方不得修改。
	Extensions() []byte
	// State 返回当前会话状态。
	State() SessionState
	// NetAddr 返回当前连接地址快照;连接迁移后会变化。
	NetAddr() NetAddr
	// Migrations 返回连接成功迁移的累计次数。
	Migrations() int64
	// DataIO 返回原始负载 I/O 门面。
	DataIO() IDataIO
	// EventIO 返回 GTP 事件 I/O 门面。
	EventIO() IEventIO
	// Close 请求以 err 为原因关闭会话,并返回关闭完成信号。
	Close(err error) async.Signal
	// Closed 返回会话关闭完成信号。
	Closed() async.Signal
}

ISession 表示可迁移连接的已鉴权客户端会话。 会话上下文在 Close 时取消;查询和 I/O 门面可被多个 goroutine 使用。

type NetAddr added in v0.3.68

type NetAddr struct {
	Local, Remote net.Addr // Local 是服务端地址,Remote 是客户端地址。
}

NetAddr 保存会话当前连接的本地与对端地址快照。

type SessionDataHandler added in v0.3.68

type SessionDataHandler = generic.DelegateVoid2[ISession, []byte]

SessionDataHandler 处理会话收到的一段原始负载。

type SessionEstablishedHandler added in v0.3.68

type SessionEstablishedHandler = generic.DelegateVoid1[ISession]

SessionEstablishedHandler 处理首次建立完成的会话;连接迁移不会重复触发。

type SessionEventHandler added in v0.3.68

type SessionEventHandler = generic.DelegateVoid2[ISession, transport.IEvent]

SessionEventHandler 处理会话收到的一个 GTP 事件。

type SessionState

type SessionState int32

SessionState 表示服务端会话从建立到过期的当前阶段。

const (
	// SessionState_Birth 表示会话已创建但握手尚未确认。
	SessionState_Birth SessionState = iota
	// SessionState_Confirmed 表示客户端身份与连接已经确认。
	SessionState_Confirmed
	// SessionState_Active 表示会话连接当前可用。
	SessionState_Active
	// SessionState_Inactive 表示连接中断,正在等待迁移重连。
	SessionState_Inactive
	// SessionState_Death 表示会话已关闭并从 gate 删除。
	SessionState_Death
)

func (SessionState) String

func (i SessionState) String() string

type WebSocketAddrResolver added in v0.3.34

type WebSocketAddrResolver = generic.Func1[*websocket.Conn, net.Addr]

WebSocketAddrResolver 从 WebSocket 握手与连接信息中解析一个网络地址。

Directories

Path Synopsis
Package cli 提供面向 gate 服务端的客户端传输层。
Package cli 提供面向 gate 服务端的客户端传输层。

Jump to

Keyboard shortcuts

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