fastnet

package module
v0.0.0-...-a183791 Latest Latest
Warning

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

Go to latest
Published: Aug 17, 2023 License: Apache-2.0 Imports: 24 Imported by: 0

README

fastnet

Documentation

Index

Constants

View Source
const (
	FastDataPack    string = "fastnet_pack_tlv_big_endian"
	FastDataPackOld string = "fastnet_pack_ltv_little_endian"
)
View Source
const (
	StackBegin = 3 // 开始追踪堆栈信息的层数
	StackEnd   = 5 // 追踪到最后的层数
)
View Source
const (
	FastMessage string = "fastnet_message" // 默认标准报文协议格式
)
View Source
const HeaderSize = 5
View Source
const (
	HeartbeatDefaultMsgID uint32 = 99999
)
View Source
const LtvHeaderSize = 8 //表示TLV空包长度
View Source
const TlvHeaderSize = 8 // 表示TLV空包长度
View Source
const (
	// WorkerIDWithoutWorkerPool (如果不启动Worker协程池,则会给MsgHandler分配一个虚拟的WorkerID,这个workerID为0, 便于指标统计
	// 启动了Worker协程池后,每个worker的ID为0,1,2,3...)
	WorkerIDWithoutWorkerPool int = 0
)

Variables

View Source
var AcceptDelay *acceptDelay

Functions

func CheckCRC

func CheckCRC(src []byte, crc []byte) bool

func GetCrC

func GetCrC(buff []byte) []byte

func HeatBeatDefaultHandle

func HeatBeatDefaultHandle(req IRequest)

func IsComplete

func IsComplete(src []byte, dst []byte) bool
func PrintLogo()

func RouterRecovery

func RouterRecovery(request IRequest)

RouterRecovery 用来存放一些RouterSlicesMode下的路由可用的默认中间件 如果使用NewDefaultRouterSlicesServer方法初始化的获得的server将自带这个函数 作用是接收业务执行上产生的panic并且尝试记录现场信息

func RouterTime

func RouterTime(request IRequest)

RouterTime 简单累计所有路由组的耗时,不启用

Types

type BaseRequest

type BaseRequest struct{}

func (*BaseRequest) Abort

func (br *BaseRequest) Abort()

func (*BaseRequest) BindRouter

func (br *BaseRequest) BindRouter(IRouter)

func (*BaseRequest) BindRouterSlices

func (br *BaseRequest) BindRouterSlices([]RouterHandler)

func (*BaseRequest) Call

func (br *BaseRequest) Call()

func (*BaseRequest) GetConnection

func (br *BaseRequest) GetConnection() IConnection

func (*BaseRequest) GetData

func (br *BaseRequest) GetData() []byte

func (*BaseRequest) GetMessage

func (br *BaseRequest) GetMessage() IMessage

func (*BaseRequest) GetMsgID

func (br *BaseRequest) GetMsgID() uint32

func (*BaseRequest) GetResponse

func (br *BaseRequest) GetResponse() IcResp

func (*BaseRequest) Goto

func (br *BaseRequest) Goto(HandleStep)

func (*BaseRequest) RouterSlicesNext

func (br *BaseRequest) RouterSlicesNext()

func (*BaseRequest) SetResponse

func (br *BaseRequest) SetResponse(IcResp)

type BaseRouter

type BaseRouter struct{}

BaseRouter 实现router时,先嵌入这个基类,然后根据需要对这个基类的方法进行重写

func (*BaseRouter) Handle

func (br *BaseRouter) Handle(req IRequest)

Handle -

func (*BaseRouter) PostHandle

func (br *BaseRouter) PostHandle(req IRequest)

PostHandle -

func (*BaseRouter) PreHandle

func (br *BaseRouter) PreHandle(req IRequest)

PreHandle -

type Chain

type Chain struct {
	// contains filtered or unexported fields
}

func (*Chain) GetIMessage

func (c *Chain) GetIMessage() IMessage

GetIMessage 从Chain中获取IMessage

func (*Chain) Proceed

func (c *Chain) Proceed(request IcReq) IcResp

func (*Chain) ProceedWithIMessage

func (c *Chain) ProceedWithIMessage(message IMessage, response IcReq) IcResp

ProceedWithIMessage Next 通过IMessage和解码后数据进入下一个责任链任务

func (*Chain) Request

func (c *Chain) Request() IcReq

func (*Chain) ShouldIRequest

func (c *Chain) ShouldIRequest(icReq IcReq) IRequest

ShouldIRequest 判断是否是IRequest

type Client

type Client struct {
	// contains filtered or unexported fields
}

func (*Client) AddInterceptor

func (c *Client) AddInterceptor(interceptor IInterceptor)

func (*Client) AddRouter

func (c *Client) AddRouter(msgID uint32, router IRouter)

func (*Client) Conn

func (c *Client) Conn() IConnection

func (*Client) GetErrChan

func (c *Client) GetErrChan() chan error

func (*Client) GetLengthField

func (c *Client) GetLengthField() *LengthField

func (*Client) GetMsgHandler

func (c *Client) GetMsgHandler() IMsgHandle

func (*Client) GetName

func (c *Client) GetName() string

func (*Client) GetOnConnStart

func (c *Client) GetOnConnStart() func(IConnection)

func (*Client) GetOnConnStop

func (c *Client) GetOnConnStop() func(IConnection)

func (*Client) GetPacket

func (c *Client) GetPacket() IDataPack

func (*Client) Restart

func (c *Client) Restart()

Restart 重新启动客户端,发送请求且建立连接

func (*Client) SetDecoder

func (c *Client) SetDecoder(decoder IDecoder)

func (*Client) SetName

func (c *Client) SetName(name string)

func (*Client) SetOnConnStart

func (c *Client) SetOnConnStart(hookFunc func(IConnection))

func (*Client) SetOnConnStop

func (c *Client) SetOnConnStop(hookFunc func(IConnection))

func (*Client) SetPacket

func (c *Client) SetPacket(packet IDataPack)

func (*Client) Start

func (c *Client) Start()

Start 启动客户端,发送请求且建立链接

func (*Client) StartHeartBeatWithOption

func (c *Client) StartHeartBeatWithOption(interval time.Duration, option *HeartbeatOption)

StartHeartBeatWithOption 启动心跳检测(自定义回调)

func (*Client) StartHeartbeat

func (c *Client) StartHeartbeat(interval time.Duration)

StartHeartbeat 启动心跳检测, interval: 每次发送心跳的时间间隔

func (*Client) Stop

func (c *Client) Stop()

type ClientOption

type ClientOption func(c IClient)

ClientOption Options for Client

func WithNameClient

func WithNameClient(name string) ClientOption

func WithPacketClient

func WithPacketClient(pack IDataPack) ClientOption

type ConnManager

type ConnManager struct {
	// contains filtered or unexported fields
}

func (*ConnManager) Add

func (connMgr *ConnManager) Add(conn IConnection)

func (*ConnManager) ClearConn

func (connMgr *ConnManager) ClearConn()

func (*ConnManager) Get

func (connMgr *ConnManager) Get(connID uint64) (IConnection, error)

func (*ConnManager) GetAllConnID

func (connMgr *ConnManager) GetAllConnID() []uint64

func (*ConnManager) Len

func (connMgr *ConnManager) Len() int

func (*ConnManager) Range

func (connMgr *ConnManager) Range(cb func(uint64, IConnection, interface{}) error, args interface{}) (err error)

func (*ConnManager) Remove

func (connMgr *ConnManager) Remove(conn IConnection)

type Connection

type Connection struct {
	// contains filtered or unexported fields
}

Connection (用于处理Tcp连接的读写业务 一个连接对应一个Connection)

func (*Connection) Context

func (c *Connection) Context() context.Context

func (*Connection) GetConnID

func (c *Connection) GetConnID() uint64

func (*Connection) GetConnection

func (c *Connection) GetConnection() net.Conn

func (*Connection) GetMsgHandler

func (c *Connection) GetMsgHandler() IMsgHandle

func (*Connection) GetName

func (c *Connection) GetName() string

func (*Connection) GetProperty

func (c *Connection) GetProperty(key string) (interface{}, error)

func (*Connection) GetWorkerID

func (c *Connection) GetWorkerID() uint32

func (*Connection) GetWsConn

func (c *Connection) GetWsConn() *websocket.Conn

func (*Connection) IsAlive

func (c *Connection) IsAlive() bool

func (*Connection) LocalAddr

func (c *Connection) LocalAddr() net.Addr

func (*Connection) LocalAddrString

func (c *Connection) LocalAddrString() string

func (*Connection) RemoteAddr

func (c *Connection) RemoteAddr() net.Addr

func (*Connection) RemoteAddrString

func (c *Connection) RemoteAddrString() string

func (*Connection) RemoveProperty

func (c *Connection) RemoveProperty(key string)

func (*Connection) Send

func (c *Connection) Send(data []byte) error

func (*Connection) SendBuffMsg

func (c *Connection) SendBuffMsg(msgID uint32, data []byte) error

func (*Connection) SendMsg

func (c *Connection) SendMsg(msgID uint32, data []byte) error

SendMsg 直接将Message数据发送数据给远程的TCP客户端

func (*Connection) SendToQueue

func (c *Connection) SendToQueue(data []byte) error

func (*Connection) SetHeartbeat

func (c *Connection) SetHeartbeat(checker IHeartbeatChecker)

func (*Connection) SetProperty

func (c *Connection) SetProperty(key string, value interface{})

func (*Connection) Start

func (c *Connection) Start()

Start 启动连接,让当前连接开始工作

func (*Connection) StartReader

func (c *Connection) StartReader()

StartReader (读消息Goroutine,用于从客户端中读取数据)

func (*Connection) StartWriter

func (c *Connection) StartWriter()

StartWriter 写消息Goroutine, 用户将数据发送给客户端

func (*Connection) Stop

func (c *Connection) Stop()

Stop 停止连接,结束当前连接状态

type DataPack

type DataPack struct{}

func (*DataPack) GetHeadLen

func (dp *DataPack) GetHeadLen() uint32

GetHeadLen 获取包头长度方法

func (*DataPack) Pack

func (dp *DataPack) Pack(msg IMessage) ([]byte, error)

Pack 封包方法,压缩数据

func (*DataPack) Unpack

func (dp *DataPack) Unpack(binaryData []byte) (IMessage, error)

Unpack 拆包方法,解压数据

type DataPackLtv

type DataPackLtv struct{}

DataPackLtv 小端方式

func (*DataPackLtv) GetHeadLen

func (dp *DataPackLtv) GetHeadLen() uint32

GetHeadLen 获取包头长度方法

func (*DataPackLtv) Pack

func (dp *DataPackLtv) Pack(msg IMessage) ([]byte, error)

Pack 封包方法,压缩数据

func (*DataPackLtv) Unpack

func (dp *DataPackLtv) Unpack(binaryData []byte) (IMessage, error)

Unpack 拆包方法,解压数据

type FrameDecoder

type FrameDecoder struct {
	LengthField //从ILengthField集成的基础属性

	LengthFieldEndOffset int //长度字段结束位置的偏移量  LengthFieldOffset+LengthFieldLength
	// contains filtered or unexported fields
}

func (*FrameDecoder) Decode

func (d *FrameDecoder) Decode(buff []byte) [][]byte

type GroupRouter

type GroupRouter struct {
	// contains filtered or unexported fields
}

func NewGroup

func NewGroup(start, end uint32, router *RouterSlices, Handlers ...RouterHandler) *GroupRouter

func (*GroupRouter) AddHandler

func (g *GroupRouter) AddHandler(MsgId uint32, Handlers ...RouterHandler)

func (*GroupRouter) Use

func (g *GroupRouter) Use(Handlers ...RouterHandler)

type HandleStep

type HandleStep int
const (
	PreHandle  HandleStep = iota // PreHandle for pre-processing
	Handle                       // Handle for processing
	PostHandle                   // PostHandle for post-processing
	HandleOver
)

type HeartbeatChecker

type HeartbeatChecker struct {
	// contains filtered or unexported fields
}

func (*HeartbeatChecker) BindConn

func (h *HeartbeatChecker) BindConn(conn IConnection)

func (*HeartbeatChecker) BindRouter

func (h *HeartbeatChecker) BindRouter(msgID uint32, router IRouter)

func (*HeartbeatChecker) BindRouterSlices

func (h *HeartbeatChecker) BindRouterSlices(msgID uint32, handlers ...RouterHandler)

func (*HeartbeatChecker) Clone

Clone 克隆到一个指定的链接上

func (*HeartbeatChecker) MsgID

func (h *HeartbeatChecker) MsgID() uint32

func (*HeartbeatChecker) Router

func (h *HeartbeatChecker) Router() IRouter

func (*HeartbeatChecker) RouterSlices

func (h *HeartbeatChecker) RouterSlices() []RouterHandler

func (*HeartbeatChecker) SendHeartbeatMsg

func (h *HeartbeatChecker) SendHeartbeatMsg() error

func (*HeartbeatChecker) SetHeartbeatFunc

func (h *HeartbeatChecker) SetHeartbeatFunc(beatFunc HeartbeatFunc)

func (*HeartbeatChecker) SetHeartbeatMsgFunc

func (h *HeartbeatChecker) SetHeartbeatMsgFunc(f HeartbeatMsgFunc)

func (*HeartbeatChecker) SetOnRemoteNotAlive

func (h *HeartbeatChecker) SetOnRemoteNotAlive(f OnRemoteNotAlive)

func (*HeartbeatChecker) Start

func (h *HeartbeatChecker) Start()

func (*HeartbeatChecker) Stop

func (h *HeartbeatChecker) Stop()

type HeartbeatFunc

type HeartbeatFunc func(IConnection) error

HeartbeatFunc 用户自定义心跳函数

type HeartbeatMsgFunc

type HeartbeatMsgFunc func(IConnection) []byte

HeartbeatMsgFunc 用户自定义的心跳检测消息处理方法

type HeartbeatOption

type HeartbeatOption struct {
	MakeMsg          HeartbeatMsgFunc // 用户自定义的心跳检测消息处理方法
	OnRemoteNotAlive OnRemoteNotAlive // 用户自定义的远程连接不存活时的处理方法
	HeartbeatMsgID   uint32           // 用户自定义的心跳检测消息ID
	Router           IRouter          // 用户自定义的心跳检测消息业务处理路由
	RouterSlices     []RouterHandler  // 新版本的路由处理函数的集合
}

type HeatBeatDefaultRouter

type HeatBeatDefaultRouter struct {
	BaseRouter
}

HeatBeatDefaultRouter 收到remote心跳消息的默认回调路由业务

func (*HeatBeatDefaultRouter) Handle

func (r *HeatBeatDefaultRouter) Handle(req IRequest)

type HtlvCrcDecoder

type HtlvCrcDecoder struct {
	Head    byte   // HeaderCode(头码)
	FunCode byte   // FunctionCode(功能码)
	Length  byte   // DataLength(数据长度)
	Body    []byte // BodyData(数据内容)
	Crc     []byte // CRC校验
	Data    []byte // Original data content(原始数据内容)
}

func (*HtlvCrcDecoder) GetLengthField

func (hcd *HtlvCrcDecoder) GetLengthField() *LengthField

func (*HtlvCrcDecoder) Intercept

func (hcd *HtlvCrcDecoder) Intercept(chain IChain) IcResp

type IChain

type IChain interface {
	Request() IcReq                             // 获取当前责任链中的请求数据(当前拦截器)
	GetIMessage() IMessage                      // 从Chain中获取IMessage
	Proceed(IcReq) IcResp                       // 进入并执行下一个拦截器,且将请求数据传递给下一个拦截器
	ProceedWithIMessage(IMessage, IcReq) IcResp // 进入并执行下一个拦截器,且将请求数据传递给下一个拦截器
}

IChain 责任链

func NewChain

func NewChain(list []IInterceptor, pos int, req IcReq) IChain

type IClient

type IClient interface {
	Restart()
	Start()
	Stop()
	AddRouter(msgID uint32, router IRouter)
	Conn() IConnection

	// SetOnConnStart 设置该Client的连接创建时Hook函数
	SetOnConnStart(func(IConnection))

	// SetOnConnStop 设置该Client的连接断开时的Hook函数
	SetOnConnStop(func(IConnection))

	// GetOnConnStart 获取该Client的连接创建时Hook函数
	GetOnConnStart() func(IConnection)

	// GetOnConnStop 设置该Client的连接断开时的Hook函数
	GetOnConnStop() func(IConnection)

	// GetPacket 获取Client绑定的数据协议封包方式
	GetPacket() IDataPack

	// SetPacket 设置Client绑定的数据协议封包方式
	SetPacket(IDataPack)

	// GetMsgHandler 获取Client绑定的消息处理模块
	GetMsgHandler() IMsgHandle

	// StartHeartbeat Start 启动心跳检测
	StartHeartbeat(time.Duration)

	// StartHeartBeatWithOption 自定义回调
	StartHeartBeatWithOption(time.Duration, *HeartbeatOption)

	// GetLengthField Get the length field of this Client
	GetLengthField() *LengthField

	// SetDecoder 设置解码器
	SetDecoder(IDecoder)

	// AddInterceptor 添加拦截器
	AddInterceptor(IInterceptor)

	// GetErrChan 获取客户端错误管道
	GetErrChan() chan error

	// SetName 设置客户端Client名称
	SetName(string)

	// GetName 获取客户端Client名称
	GetName() string
}

func NewClient

func NewClient(ip string, port int, opts ...ClientOption) IClient

func NewTLSClient

func NewTLSClient(ip string, port int, opts ...ClientOption) IClient

func NewWsClient

func NewWsClient(ip string, port int, opts ...ClientOption) IClient

type IConnManager

type IConnManager interface {
	Add(IConnection)                                                       // Add connection
	Remove(IConnection)                                                    // Remove connection
	Get(uint64) (IConnection, error)                                       // Get a connection by ConnID
	Len() int                                                              // Get current number of connections
	ClearConn()                                                            // Remove and stop all connections
	GetAllConnID() []uint64                                                // Get all connection IDs
	Range(func(uint64, IConnection, interface{}) error, interface{}) error // Traverse all connections
}

type IConnection

type IConnection interface {
	Start()                                      // Start 启动连接,让当前连接开始工作
	Stop()                                       // Stop 停止连接,结束当前连接状态
	Context() context.Context                    // Context 返回ctx,用于用户自定义的go程获取连接退出状态
	GetName() string                             // 获取当前连接名称
	GetConnection() net.Conn                     // 从当前连接获取原始的socket
	GetWsConn() *websocket.Conn                  // 从当前连接中获取原始的websocket连接
	GetConnID() uint64                           // 获取当前连接ID
	GetMsgHandler() IMsgHandle                   // 获取消息处理器
	GetWorkerID() uint32                         // 获取workerId
	RemoteAddr() net.Addr                        // 获取链接远程地址信息
	LocalAddr() net.Addr                         // 获取链接本地地址信息
	RemoteAddrString() string                    // 获取链接远程地址信息
	LocalAddrString() string                     // 获取链接本地地址信息
	Send(data []byte) error                      // Send 直接发送数据
	SendToQueue(data []byte) error               // Send 发送到队列
	SendMsg(msgID uint32, data []byte) error     // 直接将Message数据发送数据给远程的TCP客户端(无缓冲)
	SendBuffMsg(msgID uint32, data []byte) error // 直接将Message数据发送给远程的TCP客户端(有缓冲)
	SetProperty(key string, value interface{})   // Set connection property
	GetProperty(key string) (interface{}, error) // Get connection property
	RemoveProperty(key string)                   // Remove connection property
	IsAlive() bool                               // 判断当前连接是否存活
	SetHeartbeat(checker IHeartbeatChecker)      // 设置心跳检测器
}

type IDataPack

type IDataPack interface {
	GetHeadLen() uint32                // 获取包头长度方法
	Pack(msg IMessage) ([]byte, error) // 封包方法
	Unpack([]byte) (IMessage, error)   // 拆包方法
}

func NewDataPack

func NewDataPack() IDataPack

NewDataPack 封包拆包实例初始化方法

func NewDataPackLtv

func NewDataPackLtv() IDataPack

NewDataPackLtv 封包拆包实例初始化方法

type IDecoder

type IDecoder interface {
	IInterceptor
	GetLengthField() *LengthField
}

func NewHTLVCRCDecoder

func NewHTLVCRCDecoder() IDecoder

func NewLTVLittleDecoder

func NewLTVLittleDecoder() IDecoder

func NewTLVDecoder

func NewTLVDecoder() IDecoder

type IFrameDecoder

type IFrameDecoder interface {
	Decode(buff []byte) [][]byte
}

func NewFrameDecoder

func NewFrameDecoder(lf LengthField) IFrameDecoder

func NewFrameDecoderByParams

func NewFrameDecoderByParams(maxFrameLength uint64, lengthFieldOffset, lengthFieldLength, lengthAdjustment, initialBytesToStrip int) IFrameDecoder

type IFuncRequest

type IFuncRequest interface {
	CallFunc()
}

IFuncRequest 函数消息接口

type IGroupRouterSlices

type IGroupRouterSlices interface {
	Use(Handlers ...RouterHandler)                      // 添加全局组件
	AddHandler(MsgId uint32, Handlers ...RouterHandler) // 添加业务处理器集合
}

type IHeartbeatChecker

type IHeartbeatChecker interface {
	SetOnRemoteNotAlive(OnRemoteNotAlive)
	SetHeartbeatMsgFunc(HeartbeatMsgFunc)
	SetHeartbeatFunc(HeartbeatFunc)
	BindRouter(uint32, IRouter)
	BindRouterSlices(uint32, ...RouterHandler)
	Start()
	Stop()
	SendHeartbeatMsg() error
	BindConn(IConnection)
	Clone() IHeartbeatChecker
	MsgID() uint32
	Router() IRouter
	RouterSlices() []RouterHandler
}

func NewHeartbeatChecker

func NewHeartbeatChecker(interval time.Duration) IHeartbeatChecker

type IInterceptor

type IInterceptor interface {
	Intercept(IChain) IcResp // 拦截器的拦截处理方法,由开发者定义
}

IInterceptor 拦截器

type IMessage

type IMessage interface {
	GetDataLen() uint32 // 获取消息数据段长度
	GetMsgID() uint32   // 获取消息ID
	GetData() []byte    // 获取消息内容
	GetRawData() []byte // 获取原始数据
	SetMsgID(uint32)    // 设计消息ID
	SetData([]byte)     // 设计消息内容
	SetDataLen(uint32)  // 设置消息数据段长度
}

type IMsgHandle

type IMsgHandle interface {
	AddRouter(msgID uint32, router IRouter)                                //
	AddRouterSlices(msgId uint32, handler ...RouterHandler) IRouterSlices  //
	Group(start, end uint32, Handlers ...RouterHandler) IGroupRouterSlices //
	Use(Handlers ...RouterHandler) IRouterSlices                           //
	StartWorkerPool()                                                      // Start the worker pool
	SendMsgToTaskQueue(request IRequest)                                   // 将消息交给TaskQueue,由worker进行处理
	Execute(request IRequest)                                              // 执行责任链上的拦截器方法
	AddInterceptor(interceptor IInterceptor)                               // 注册责任链任务入口,每个拦截器处理完后,数据都会传递至下一个拦截器,使得消息可以层层处理层层传递,顺序取决于注册顺序
}

type IRequest

type IRequest interface {
	GetConnection() IConnection       // 获取请求连接信息
	GetData() []byte                  // 获取请求消息的数据
	GetMsgID() uint32                 // 获取请求的消息ID
	GetMessage() IMessage             // 获取请求消息的原始数据
	GetResponse() IcResp              // 获取解析完后序列化数据
	SetResponse(IcResp)               // 设置解析完后序列化数据
	BindRouter(router IRouter)        // 绑定这次请求由哪个路由处理
	Call()                            // 转进到下一个处理器开始执行 但是调用此方法的函数会根据先后顺序逆序执行
	Abort()                           // 终止处理函数的运行 但调用此方法的函数会执行完毕
	Goto(HandleStep)                  // 指定接下来的Handle去执行哪个Handler函数(慎用,会导致循环调用)
	BindRouterSlices([]RouterHandler) // 新路由操作
	RouterSlicesNext()                // 执行下一个函数
}

IRequest 实际上是把客户端请求的链接信息 和 请求的数据 包装到了 Request里

func NewFuncRequest

func NewFuncRequest(conn IConnection, callFunc func()) IRequest

func NewRequest

func NewRequest(conn IConnection, msg IMessage) IRequest

type IRouter

type IRouter interface {
	PreHandle(request IRequest)  // 在处理conn业务之前的钩子方法
	Handle(request IRequest)     // 处理conn业务的方法
	PostHandle(request IRequest) // 处理conn业务之后的钩子方法
}

IRouter 路由接口, 这里面路由是 使用框架者给该链接自定的 处理业务方法 路由里的IRequest 则包含用该链接的链接信息和该链接的请求数据信息

type IRouterSlices

type IRouterSlices interface {
	Use(Handlers ...RouterHandler)                                         // 添加全局组件
	AddHandler(msgId uint32, handlers ...RouterHandler)                    // 添加业务处理器集合
	Group(start, end uint32, Handlers ...RouterHandler) IGroupRouterSlices // 路由分组管理,并且会返回一个组管理器
	GetHandlers(MsgId uint32) ([]RouterHandler, bool)                      // 获得当前的所有注册在MsgId的处理器集合
}

type IServer

type IServer interface {
	Start()                                                                // 启动服务器方法
	Stop()                                                                 // 停止服务器方法
	Serve()                                                                // 开启业务服务方法
	AddRouter(msgID uint32, router IRouter)                                // 路由功能:给当前服务注册一个路由业务方法,供客户端链接处理使用
	AddRouterSlices(msgID uint32, router ...RouterHandler) IRouterSlices   // 新版路由方式
	Group(start, end uint32, Handlers ...RouterHandler) IGroupRouterSlices // 路由组管理
	Use(Handlers ...RouterHandler) IRouterSlices                           // 公共组件管理
	GetConnMgr() IConnManager                                              // 得到链接管理
	SetOnConnStart(func(IConnection))                                      // 设置该Server的连接创建时Hook函数
	SetOnConnStop(func(IConnection))                                       // 设置该Server的连接断开时的Hook函数
	GetOnConnStart() func(IConnection)                                     // 得到该Server的连接创建时Hook函数
	GetOnConnStop() func(IConnection)                                      // 得到该Server的连接断开时的Hook函数
	GetPacket() IDataPack                                                  // 获取Server绑定的数据协议封包方式
	GetMsgHandler() IMsgHandle                                             // 获取Server绑定的消息处理模块
	SetPacket(IDataPack)                                                   // 设置Server绑定的数据协议封包方式
	StartHeartbeat(time.Duration)                                          // 启动心跳检测
	StartHeartbeatWithOption(time.Duration, *HeartbeatOption)              // 启动心跳检测(自定义回调)
	GetHeartbeat() IHeartbeatChecker                                       // 获取心跳检测器
	GetLengthField() *LengthField                                          //
	SetDecoder(IDecoder)                                                   //
	AddInterceptor(IInterceptor)                                           //
	SetWebsocketAuth(func(r *http.Request) error)                          // 添加websocket认证方法
	ServerName() string                                                    // 获取服务器名称
}

IServer Defines the server interface

func NewDefaultRouterSlicesServer

func NewDefaultRouterSlicesServer(opts ...Option) IServer

NewDefaultRouterSlicesServer 创建一个默认自带一个Recover处理器的服务器句柄

func NewServer

func NewServer(opts ...Option) IServer

NewServer 创建一个服务器句柄

func NewUserConfDefaultRouterSlicesServer

func NewUserConfDefaultRouterSlicesServer(config *xconf.Config, opts ...Option) IServer

NewUserConfDefaultRouterSlicesServer 创建一个用户配置的自带一个Recover处理器的服务器句柄,如果用户不希望Use这个方法,那么应该使用NewUserConfServer

func NewUserConfServer

func NewUserConfServer(config *xconf.Config, opts ...Option) IServer

NewUserConfServer 创建一个服务器句柄

type IcReq

type IcReq interface{}

IcReq 拦截器输入数据

type IcResp

type IcResp interface{}

IcResp 拦截器输出数据

type LengthField

type LengthField struct {
	/*
		大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,地址由小向大增加,而数据从高位往低位放;
		小端模式:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,高地址部分权值高,低地址部分权值低,和我们的日常逻辑方法一致。
	*/
	Order               binary.ByteOrder // 大小端
	MaxFrameLength      uint64           // 最大帧长度
	LengthFieldOffset   int              // 长度字段偏移量
	LengthFieldLength   int              // 长度域字段的字节数
	LengthAdjustment    int              // 长度调整
	InitialBytesToStrip int              // 需要跳过的字节数
}

LengthField 具备的基础属性

type LtvLittleDecoder

type LtvLittleDecoder struct {
	Length uint32 //L
	Tag    uint32 //T
	Value  []byte //V
}

func (*LtvLittleDecoder) GetLengthField

func (ltv *LtvLittleDecoder) GetLengthField() *LengthField

func (*LtvLittleDecoder) Intercept

func (ltv *LtvLittleDecoder) Intercept(chain IChain) IcResp

type Message

type Message struct {
	DataLen uint32 // Length of the message
	ID      uint32 // ID of the message
	Data    []byte // Content of the message
	// contains filtered or unexported fields
}

Message structure for messages

func NewMessage

func NewMessage(len uint32, data []byte) *Message

func NewMessageByMsgId

func NewMessageByMsgId(id uint32, len uint32, data []byte) *Message

func NewMsgPackage

func NewMsgPackage(ID uint32, data []byte) *Message

func (*Message) GetData

func (msg *Message) GetData() []byte

func (*Message) GetDataLen

func (msg *Message) GetDataLen() uint32

func (*Message) GetMsgID

func (msg *Message) GetMsgID() uint32

func (*Message) GetRawData

func (msg *Message) GetRawData() []byte

func (*Message) Init

func (msg *Message) Init(ID uint32, data []byte)

func (*Message) SetData

func (msg *Message) SetData(data []byte)

func (*Message) SetDataLen

func (msg *Message) SetDataLen(len uint32)

func (*Message) SetMsgID

func (msg *Message) SetMsgID(msgID uint32)

type MsgHandle

type MsgHandle struct {
	TaskQueue []chan IRequest // Worker负责取任务的消息队列
	// contains filtered or unexported fields
}

MsgHandle 对消息的处理回调模块

func (*MsgHandle) AddInterceptor

func (mh *MsgHandle) AddInterceptor(interceptor IInterceptor)

func (*MsgHandle) AddRouter

func (mh *MsgHandle) AddRouter(msgID uint32, router IRouter)

AddRouter 为消息添加具体的处理逻辑

func (*MsgHandle) AddRouterSlices

func (mh *MsgHandle) AddRouterSlices(msgId uint32, handler ...RouterHandler) IRouterSlices

AddRouterSlices 切片路由添加

func (*MsgHandle) Execute

func (mh *MsgHandle) Execute(request IRequest)

func (*MsgHandle) Group

func (mh *MsgHandle) Group(start, end uint32, Handlers ...RouterHandler) IGroupRouterSlices

Group 路由分组

func (*MsgHandle) Intercept

func (mh *MsgHandle) Intercept(chain IChain) IcResp

Intercept 默认必经的数据处理拦截器

func (*MsgHandle) SendMsgToTaskQueue

func (mh *MsgHandle) SendMsgToTaskQueue(request IRequest)

SendMsgToTaskQueue 将消息交给TaskQueue,由worker进行处理

func (*MsgHandle) StartOneWorker

func (mh *MsgHandle) StartOneWorker(workerID int, taskQueue chan IRequest)

StartOneWorker 启动一个Worker工作流程

func (*MsgHandle) StartWorkerPool

func (mh *MsgHandle) StartWorkerPool()

StartWorkerPool starts the worker pool

func (*MsgHandle) Use

func (mh *MsgHandle) Use(Handlers ...RouterHandler) IRouterSlices

type OnRemoteNotAlive

type OnRemoteNotAlive func(IConnection)

OnRemoteNotAlive 用户自定义的远程连接不存活时的处理方法

type Option

type Option func(s *Server)

Option Server的服务Option

func WithPacket

func WithPacket(pack IDataPack) Option

WithPacket 只要实现Packet 接口可自由实现数据包解析格式,如果没有则使用默认解析格式

type PackFactory

type PackFactory struct{}

func Factory

func Factory() *PackFactory

Factory 生成不同封包解包的方式,单例

func (*PackFactory) NewPack

func (f *PackFactory) NewPack(kind string) IDataPack

NewPack 创建一个具体的拆包解包对象

type Request

type Request struct {
	BaseRequest
	// contains filtered or unexported fields
}

Request 请求

func (*Request) Abort

func (r *Request) Abort()

func (*Request) BindRouter

func (r *Request) BindRouter(router IRouter)

func (*Request) BindRouterSlices

func (r *Request) BindRouterSlices(handlers []RouterHandler)

func (*Request) Call

func (r *Request) Call()

func (*Request) GetConnection

func (r *Request) GetConnection() IConnection

func (*Request) GetData

func (r *Request) GetData() []byte

func (*Request) GetMessage

func (r *Request) GetMessage() IMessage

func (*Request) GetMsgID

func (r *Request) GetMsgID() uint32

func (*Request) GetResponse

func (r *Request) GetResponse() IcResp

func (*Request) Goto

func (r *Request) Goto(step HandleStep)

func (*Request) RouterSlicesNext

func (r *Request) RouterSlicesNext()

func (*Request) SetResponse

func (r *Request) SetResponse(response IcResp)

type RequestFunc

type RequestFunc struct {
	BaseRequest
	// contains filtered or unexported fields
}

func (*RequestFunc) CallFunc

func (rf *RequestFunc) CallFunc()

func (*RequestFunc) GetConnection

func (rf *RequestFunc) GetConnection() IConnection

type RouterHandler

type RouterHandler func(request IRequest)

RouterHandler 方法切片集合式路路由 不同于旧版 新版本仅保存路由方法集合,具体执行交给每个请求的 IRequest

type RouterSlices

type RouterSlices struct {
	Apis     map[uint32][]RouterHandler
	Handlers []RouterHandler
	sync.RWMutex
}

func NewRouterSlices

func NewRouterSlices() *RouterSlices

func (*RouterSlices) AddHandler

func (r *RouterSlices) AddHandler(msgId uint32, Handlers ...RouterHandler)

func (*RouterSlices) GetHandlers

func (r *RouterSlices) GetHandlers(MsgId uint32) ([]RouterHandler, bool)

func (*RouterSlices) Group

func (r *RouterSlices) Group(start, end uint32, Handlers ...RouterHandler) IGroupRouterSlices

func (*RouterSlices) Use

func (r *RouterSlices) Use(handles ...RouterHandler)

type Server

type Server struct {
	// contains filtered or unexported fields
}

Server 接口实现,定义一个Server服务类

func (*Server) AddInterceptor

func (s *Server) AddInterceptor(interceptor IInterceptor)

func (*Server) AddRouter

func (s *Server) AddRouter(msgID uint32, router IRouter)

func (*Server) AddRouterSlices

func (s *Server) AddRouterSlices(msgID uint32, router ...RouterHandler) IRouterSlices

func (*Server) GetConnMgr

func (s *Server) GetConnMgr() IConnManager

func (*Server) GetHeartbeat

func (s *Server) GetHeartbeat() IHeartbeatChecker

func (*Server) GetLengthField

func (s *Server) GetLengthField() *LengthField

func (*Server) GetMsgHandler

func (s *Server) GetMsgHandler() IMsgHandle

func (*Server) GetOnConnStart

func (s *Server) GetOnConnStart() func(IConnection)

func (*Server) GetOnConnStop

func (s *Server) GetOnConnStop() func(IConnection)

func (*Server) GetPacket

func (s *Server) GetPacket() IDataPack

func (*Server) Group

func (s *Server) Group(start, end uint32, Handlers ...RouterHandler) IGroupRouterSlices

func (*Server) ListenTcpConn

func (s *Server) ListenTcpConn()

func (*Server) ListenWebsocketConn

func (s *Server) ListenWebsocketConn()

func (*Server) Serve

func (s *Server) Serve()

Serve 运行服务

func (*Server) ServerName

func (s *Server) ServerName() string

func (*Server) SetDecoder

func (s *Server) SetDecoder(decoder IDecoder)

func (*Server) SetOnConnStart

func (s *Server) SetOnConnStart(hookFunc func(IConnection))

func (*Server) SetOnConnStop

func (s *Server) SetOnConnStop(hookFunc func(IConnection))

func (*Server) SetPacket

func (s *Server) SetPacket(packet IDataPack)

func (*Server) SetWebsocketAuth

func (s *Server) SetWebsocketAuth(f func(r *http.Request) error)

func (*Server) Start

func (s *Server) Start()

Start 开启网络服务

func (*Server) StartConn

func (s *Server) StartConn(conn IConnection)

func (*Server) StartHeartbeat

func (s *Server) StartHeartbeat(interval time.Duration)

StartHeartbeat 启动心跳检测 interval 每次发送心跳的时间间隔

func (*Server) StartHeartbeatWithOption

func (s *Server) StartHeartbeatWithOption(interval time.Duration, option *HeartbeatOption)

StartHeartbeatWithOption 启动心跳检测 option 心跳检测的配置

func (*Server) Stop

func (s *Server) Stop()

Stop 停止服务

func (*Server) Use

func (s *Server) Use(Handlers ...RouterHandler) IRouterSlices

type TLVDecoder

type TLVDecoder struct {
	Tag    uint32 //T
	Length uint32 //L
	Value  []byte //V
}

func (*TLVDecoder) GetLengthField

func (tlv *TLVDecoder) GetLengthField() *LengthField

func (*TLVDecoder) Intercept

func (tlv *TLVDecoder) Intercept(chain IChain) IcResp

type WsConnection

type WsConnection struct {
	// contains filtered or unexported fields
}

WsConnection Websocket连接模块, 用于处理 Websocket 连接的读写业务 一个连接对应一个Connection

func (*WsConnection) Context

func (c *WsConnection) Context() context.Context

Context 返回ctx,用于用户自定义的go程获取连接退出状态

func (*WsConnection) GetConnID

func (c *WsConnection) GetConnID() uint64

func (*WsConnection) GetConnection

func (c *WsConnection) GetConnection() net.Conn

func (*WsConnection) GetMsgHandler

func (c *WsConnection) GetMsgHandler() IMsgHandle

func (*WsConnection) GetName

func (c *WsConnection) GetName() string

func (*WsConnection) GetProperty

func (c *WsConnection) GetProperty(key string) (interface{}, error)

func (*WsConnection) GetWorkerID

func (c *WsConnection) GetWorkerID() uint32

func (*WsConnection) GetWsConn

func (c *WsConnection) GetWsConn() *websocket.Conn

func (*WsConnection) IsAlive

func (c *WsConnection) IsAlive() bool

func (*WsConnection) LocalAddr

func (c *WsConnection) LocalAddr() net.Addr

func (*WsConnection) LocalAddrString

func (c *WsConnection) LocalAddrString() string

func (*WsConnection) RemoteAddr

func (c *WsConnection) RemoteAddr() net.Addr

func (*WsConnection) RemoteAddrString

func (c *WsConnection) RemoteAddrString() string

func (*WsConnection) RemoveProperty

func (c *WsConnection) RemoveProperty(key string)

func (*WsConnection) Send

func (c *WsConnection) Send(data []byte) error

func (*WsConnection) SendBuffMsg

func (c *WsConnection) SendBuffMsg(msgID uint32, data []byte) error

SendBuffMsg sends BuffMsg

func (*WsConnection) SendMsg

func (c *WsConnection) SendMsg(msgID uint32, data []byte) error

SendMsg 直接将Message数据发送数据给远程的TCP客户端

func (*WsConnection) SendToQueue

func (c *WsConnection) SendToQueue(data []byte) error

func (*WsConnection) SetHeartbeat

func (c *WsConnection) SetHeartbeat(checker IHeartbeatChecker)

func (*WsConnection) SetProperty

func (c *WsConnection) SetProperty(key string, value interface{})

func (*WsConnection) Start

func (c *WsConnection) Start()

Start 启动连接,让当前连接开始工作

func (*WsConnection) StartReader

func (c *WsConnection) StartReader()

StartReader 读消息Goroutine,用于从客户端中读取数据

func (*WsConnection) StartWriter

func (c *WsConnection) StartWriter()

StartWriter 写消息Goroutine, 用户将数据发送给客户端

func (*WsConnection) Stop

func (c *WsConnection) Stop()

Stop 停止连接,结束当前连接状态

Directories

Path Synopsis
examples

Jump to

Keyboard shortcuts

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