Documentation ¶
Index ¶
- Constants
- Variables
- func CheckCRC(src []byte, crc []byte) bool
- func GetCrC(buff []byte) []byte
- func HeatBeatDefaultHandle(req IRequest)
- func IsComplete(src []byte, dst []byte) bool
- func PrintLogo()
- func RouterRecovery(request IRequest)
- func RouterTime(request IRequest)
- type BaseRequest
- func (br *BaseRequest) Abort()
- func (br *BaseRequest) BindRouter(IRouter)
- func (br *BaseRequest) BindRouterSlices([]RouterHandler)
- func (br *BaseRequest) Call()
- func (br *BaseRequest) GetConnection() IConnection
- func (br *BaseRequest) GetData() []byte
- func (br *BaseRequest) GetMessage() IMessage
- func (br *BaseRequest) GetMsgID() uint32
- func (br *BaseRequest) GetResponse() IcResp
- func (br *BaseRequest) Goto(HandleStep)
- func (br *BaseRequest) RouterSlicesNext()
- func (br *BaseRequest) SetResponse(IcResp)
- type BaseRouter
- type Chain
- type Client
- func (c *Client) AddInterceptor(interceptor IInterceptor)
- func (c *Client) AddRouter(msgID uint32, router IRouter)
- func (c *Client) Conn() IConnection
- func (c *Client) GetErrChan() chan error
- func (c *Client) GetLengthField() *LengthField
- func (c *Client) GetMsgHandler() IMsgHandle
- func (c *Client) GetName() string
- func (c *Client) GetOnConnStart() func(IConnection)
- func (c *Client) GetOnConnStop() func(IConnection)
- func (c *Client) GetPacket() IDataPack
- func (c *Client) Restart()
- func (c *Client) SetDecoder(decoder IDecoder)
- func (c *Client) SetName(name string)
- func (c *Client) SetOnConnStart(hookFunc func(IConnection))
- func (c *Client) SetOnConnStop(hookFunc func(IConnection))
- func (c *Client) SetPacket(packet IDataPack)
- func (c *Client) Start()
- func (c *Client) StartHeartBeatWithOption(interval time.Duration, option *HeartbeatOption)
- func (c *Client) StartHeartbeat(interval time.Duration)
- func (c *Client) Stop()
- type ClientOption
- type ConnManager
- func (connMgr *ConnManager) Add(conn IConnection)
- func (connMgr *ConnManager) ClearConn()
- func (connMgr *ConnManager) Get(connID uint64) (IConnection, error)
- func (connMgr *ConnManager) GetAllConnID() []uint64
- func (connMgr *ConnManager) Len() int
- func (connMgr *ConnManager) Range(cb func(uint64, IConnection, interface{}) error, args interface{}) (err error)
- func (connMgr *ConnManager) Remove(conn IConnection)
- type Connection
- func (c *Connection) Context() context.Context
- func (c *Connection) GetConnID() uint64
- func (c *Connection) GetConnection() net.Conn
- func (c *Connection) GetMsgHandler() IMsgHandle
- func (c *Connection) GetName() string
- func (c *Connection) GetProperty(key string) (interface{}, error)
- func (c *Connection) GetWorkerID() uint32
- func (c *Connection) GetWsConn() *websocket.Conn
- func (c *Connection) IsAlive() bool
- func (c *Connection) LocalAddr() net.Addr
- func (c *Connection) LocalAddrString() string
- func (c *Connection) RemoteAddr() net.Addr
- func (c *Connection) RemoteAddrString() string
- func (c *Connection) RemoveProperty(key string)
- func (c *Connection) Send(data []byte) error
- func (c *Connection) SendBuffMsg(msgID uint32, data []byte) error
- func (c *Connection) SendMsg(msgID uint32, data []byte) error
- func (c *Connection) SendToQueue(data []byte) error
- func (c *Connection) SetHeartbeat(checker IHeartbeatChecker)
- func (c *Connection) SetProperty(key string, value interface{})
- func (c *Connection) Start()
- func (c *Connection) StartReader()
- func (c *Connection) StartWriter()
- func (c *Connection) Stop()
- type DataPack
- type DataPackLtv
- type FrameDecoder
- type GroupRouter
- type HandleStep
- type HeartbeatChecker
- func (h *HeartbeatChecker) BindConn(conn IConnection)
- func (h *HeartbeatChecker) BindRouter(msgID uint32, router IRouter)
- func (h *HeartbeatChecker) BindRouterSlices(msgID uint32, handlers ...RouterHandler)
- func (h *HeartbeatChecker) Clone() IHeartbeatChecker
- func (h *HeartbeatChecker) MsgID() uint32
- func (h *HeartbeatChecker) Router() IRouter
- func (h *HeartbeatChecker) RouterSlices() []RouterHandler
- func (h *HeartbeatChecker) SendHeartbeatMsg() error
- func (h *HeartbeatChecker) SetHeartbeatFunc(beatFunc HeartbeatFunc)
- func (h *HeartbeatChecker) SetHeartbeatMsgFunc(f HeartbeatMsgFunc)
- func (h *HeartbeatChecker) SetOnRemoteNotAlive(f OnRemoteNotAlive)
- func (h *HeartbeatChecker) Start()
- func (h *HeartbeatChecker) Stop()
- type HeartbeatFunc
- type HeartbeatMsgFunc
- type HeartbeatOption
- type HeatBeatDefaultRouter
- type HtlvCrcDecoder
- type IChain
- type IClient
- type IConnManager
- type IConnection
- type IDataPack
- type IDecoder
- type IFrameDecoder
- type IFuncRequest
- type IGroupRouterSlices
- type IHeartbeatChecker
- type IInterceptor
- type IMessage
- type IMsgHandle
- type IRequest
- type IRouter
- type IRouterSlices
- type IServer
- type IcReq
- type IcResp
- type LengthField
- type LtvLittleDecoder
- type Message
- func (msg *Message) GetData() []byte
- func (msg *Message) GetDataLen() uint32
- func (msg *Message) GetMsgID() uint32
- func (msg *Message) GetRawData() []byte
- func (msg *Message) Init(ID uint32, data []byte)
- func (msg *Message) SetData(data []byte)
- func (msg *Message) SetDataLen(len uint32)
- func (msg *Message) SetMsgID(msgID uint32)
- type MsgHandle
- func (mh *MsgHandle) AddInterceptor(interceptor IInterceptor)
- func (mh *MsgHandle) AddRouter(msgID uint32, router IRouter)
- func (mh *MsgHandle) AddRouterSlices(msgId uint32, handler ...RouterHandler) IRouterSlices
- func (mh *MsgHandle) Execute(request IRequest)
- func (mh *MsgHandle) Group(start, end uint32, Handlers ...RouterHandler) IGroupRouterSlices
- func (mh *MsgHandle) Intercept(chain IChain) IcResp
- func (mh *MsgHandle) SendMsgToTaskQueue(request IRequest)
- func (mh *MsgHandle) StartOneWorker(workerID int, taskQueue chan IRequest)
- func (mh *MsgHandle) StartWorkerPool()
- func (mh *MsgHandle) Use(Handlers ...RouterHandler) IRouterSlices
- type OnRemoteNotAlive
- type Option
- type PackFactory
- type Request
- func (r *Request) Abort()
- func (r *Request) BindRouter(router IRouter)
- func (r *Request) BindRouterSlices(handlers []RouterHandler)
- func (r *Request) Call()
- func (r *Request) GetConnection() IConnection
- func (r *Request) GetData() []byte
- func (r *Request) GetMessage() IMessage
- func (r *Request) GetMsgID() uint32
- func (r *Request) GetResponse() IcResp
- func (r *Request) Goto(step HandleStep)
- func (r *Request) RouterSlicesNext()
- func (r *Request) SetResponse(response IcResp)
- type RequestFunc
- type RouterHandler
- type RouterSlices
- type Server
- func (s *Server) AddInterceptor(interceptor IInterceptor)
- func (s *Server) AddRouter(msgID uint32, router IRouter)
- func (s *Server) AddRouterSlices(msgID uint32, router ...RouterHandler) IRouterSlices
- func (s *Server) GetConnMgr() IConnManager
- func (s *Server) GetHeartbeat() IHeartbeatChecker
- func (s *Server) GetLengthField() *LengthField
- func (s *Server) GetMsgHandler() IMsgHandle
- func (s *Server) GetOnConnStart() func(IConnection)
- func (s *Server) GetOnConnStop() func(IConnection)
- func (s *Server) GetPacket() IDataPack
- func (s *Server) Group(start, end uint32, Handlers ...RouterHandler) IGroupRouterSlices
- func (s *Server) ListenTcpConn()
- func (s *Server) ListenWebsocketConn()
- func (s *Server) Serve()
- func (s *Server) ServerName() string
- func (s *Server) SetDecoder(decoder IDecoder)
- func (s *Server) SetOnConnStart(hookFunc func(IConnection))
- func (s *Server) SetOnConnStop(hookFunc func(IConnection))
- func (s *Server) SetPacket(packet IDataPack)
- func (s *Server) SetWebsocketAuth(f func(r *http.Request) error)
- func (s *Server) Start()
- func (s *Server) StartConn(conn IConnection)
- func (s *Server) StartHeartbeat(interval time.Duration)
- func (s *Server) StartHeartbeatWithOption(interval time.Duration, option *HeartbeatOption)
- func (s *Server) Stop()
- func (s *Server) Use(Handlers ...RouterHandler) IRouterSlices
- type TLVDecoder
- type WsConnection
- func (c *WsConnection) Context() context.Context
- func (c *WsConnection) GetConnID() uint64
- func (c *WsConnection) GetConnection() net.Conn
- func (c *WsConnection) GetMsgHandler() IMsgHandle
- func (c *WsConnection) GetName() string
- func (c *WsConnection) GetProperty(key string) (interface{}, error)
- func (c *WsConnection) GetWorkerID() uint32
- func (c *WsConnection) GetWsConn() *websocket.Conn
- func (c *WsConnection) IsAlive() bool
- func (c *WsConnection) LocalAddr() net.Addr
- func (c *WsConnection) LocalAddrString() string
- func (c *WsConnection) RemoteAddr() net.Addr
- func (c *WsConnection) RemoteAddrString() string
- func (c *WsConnection) RemoveProperty(key string)
- func (c *WsConnection) Send(data []byte) error
- func (c *WsConnection) SendBuffMsg(msgID uint32, data []byte) error
- func (c *WsConnection) SendMsg(msgID uint32, data []byte) error
- func (c *WsConnection) SendToQueue(data []byte) error
- func (c *WsConnection) SetHeartbeat(checker IHeartbeatChecker)
- func (c *WsConnection) SetProperty(key string, value interface{})
- func (c *WsConnection) Start()
- func (c *WsConnection) StartReader()
- func (c *WsConnection) StartWriter()
- func (c *WsConnection) Stop()
Constants ¶
const ( FastDataPack string = "fastnet_pack_tlv_big_endian" FastDataPackOld string = "fastnet_pack_ltv_little_endian" )
const ( StackBegin = 3 // 开始追踪堆栈信息的层数 StackEnd = 5 // 追踪到最后的层数 )
const (
FastMessage string = "fastnet_message" // 默认标准报文协议格式
)
const HeaderSize = 5
const (
HeartbeatDefaultMsgID uint32 = 99999
)
const LtvHeaderSize = 8 //表示TLV空包长度
const TlvHeaderSize = 8 // 表示TLV空包长度
const ( // WorkerIDWithoutWorkerPool (如果不启动Worker协程池,则会给MsgHandler分配一个虚拟的WorkerID,这个workerID为0, 便于指标统计 // 启动了Worker协程池后,每个worker的ID为0,1,2,3...) WorkerIDWithoutWorkerPool int = 0 )
Variables ¶
var AcceptDelay *acceptDelay
Functions ¶
func HeatBeatDefaultHandle ¶
func HeatBeatDefaultHandle(req IRequest)
func IsComplete ¶
func RouterRecovery ¶
func RouterRecovery(request IRequest)
RouterRecovery 用来存放一些RouterSlicesMode下的路由可用的默认中间件 如果使用NewDefaultRouterSlicesServer方法初始化的获得的server将自带这个函数 作用是接收业务执行上产生的panic并且尝试记录现场信息
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 Chain ¶
type Chain struct {
// contains filtered or unexported fields
}
func (*Chain) ProceedWithIMessage ¶
ProceedWithIMessage Next 通过IMessage和解码后数据进入下一个责任链任务
func (*Chain) ShouldIRequest ¶
ShouldIRequest 判断是否是IRequest
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
func (*Client) AddInterceptor ¶
func (c *Client) AddInterceptor(interceptor IInterceptor)
func (*Client) Conn ¶
func (c *Client) Conn() IConnection
func (*Client) GetErrChan ¶
func (*Client) GetLengthField ¶
func (c *Client) GetLengthField() *LengthField
func (*Client) GetMsgHandler ¶
func (c *Client) GetMsgHandler() IMsgHandle
func (*Client) GetOnConnStart ¶
func (c *Client) GetOnConnStart() func(IConnection)
func (*Client) GetOnConnStop ¶
func (c *Client) GetOnConnStop() func(IConnection)
func (*Client) SetDecoder ¶
func (*Client) SetOnConnStart ¶
func (c *Client) SetOnConnStart(hookFunc func(IConnection))
func (*Client) SetOnConnStop ¶
func (c *Client) SetOnConnStop(hookFunc func(IConnection))
func (*Client) StartHeartBeatWithOption ¶
func (c *Client) StartHeartBeatWithOption(interval time.Duration, option *HeartbeatOption)
StartHeartBeatWithOption 启动心跳检测(自定义回调)
func (*Client) StartHeartbeat ¶
StartHeartbeat 启动心跳检测, interval: 每次发送心跳的时间间隔
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) StartReader ¶
func (c *Connection) StartReader()
StartReader (读消息Goroutine,用于从客户端中读取数据)
func (*Connection) StartWriter ¶
func (c *Connection) StartWriter()
StartWriter 写消息Goroutine, 用户将数据发送给客户端
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 ¶
func (h *HeartbeatChecker) Clone() IHeartbeatChecker
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 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 责任链
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 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 IDecoder ¶
type IDecoder interface { IInterceptor GetLengthField() *LengthField }
func NewHTLVCRCDecoder ¶
func NewHTLVCRCDecoder() IDecoder
func NewLTVLittleDecoder ¶
func NewLTVLittleDecoder() IDecoder
func NewTLVDecoder ¶
func NewTLVDecoder() IDecoder
type IFrameDecoder ¶
func NewFrameDecoder ¶
func NewFrameDecoder(lf LengthField) IFrameDecoder
func NewFrameDecoderByParams ¶
func NewFrameDecoderByParams(maxFrameLength uint64, lengthFieldOffset, lengthFieldLength, lengthAdjustment, initialBytesToStrip int) IFrameDecoder
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 ¶
IInterceptor 拦截器
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 ¶
NewDefaultRouterSlicesServer 创建一个默认自带一个Recover处理器的服务器句柄
func NewUserConfDefaultRouterSlicesServer ¶
NewUserConfDefaultRouterSlicesServer 创建一个用户配置的自带一个Recover处理器的服务器句柄,如果用户不希望Use这个方法,那么应该使用NewUserConfServer
type LengthField ¶
type LengthField struct { /* 大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,地址由小向大增加,而数据从高位往低位放; 小端模式:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,高地址部分权值高,低地址部分权值低,和我们的日常逻辑方法一致。 */ Order binary.ByteOrder // 大小端 MaxFrameLength uint64 // 最大帧长度 LengthFieldOffset int // 长度字段偏移量 LengthFieldLength int // 长度域字段的字节数 LengthAdjustment int // 长度调整 InitialBytesToStrip int // 需要跳过的字节数 }
LengthField 具备的基础属性
type LtvLittleDecoder ¶
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 NewMsgPackage ¶
func (*Message) GetDataLen ¶
func (*Message) GetRawData ¶
func (*Message) SetDataLen ¶
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) AddRouterSlices ¶
func (mh *MsgHandle) AddRouterSlices(msgId uint32, handler ...RouterHandler) IRouterSlices
AddRouterSlices 切片路由添加
func (*MsgHandle) Group ¶
func (mh *MsgHandle) Group(start, end uint32, Handlers ...RouterHandler) IGroupRouterSlices
Group 路由分组
func (*MsgHandle) SendMsgToTaskQueue ¶
SendMsgToTaskQueue 将消息交给TaskQueue,由worker进行处理
func (*MsgHandle) StartOneWorker ¶
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 ¶
WithPacket 只要实现Packet 接口可自由实现数据包解析格式,如果没有则使用默认解析格式
type PackFactory ¶
type PackFactory struct{}
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) BindRouter ¶
func (*Request) BindRouterSlices ¶
func (r *Request) BindRouterSlices(handlers []RouterHandler)
func (*Request) GetConnection ¶
func (r *Request) GetConnection() IConnection
func (*Request) GetMessage ¶
func (*Request) GetResponse ¶
func (*Request) Goto ¶
func (r *Request) Goto(step HandleStep)
func (*Request) RouterSlicesNext ¶
func (r *Request) RouterSlicesNext()
func (*Request) SetResponse ¶
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) 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) 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) ServerName ¶
func (*Server) SetDecoder ¶
func (*Server) SetOnConnStart ¶
func (s *Server) SetOnConnStart(hookFunc func(IConnection))
func (*Server) SetOnConnStop ¶
func (s *Server) SetOnConnStop(hookFunc func(IConnection))
func (*Server) StartConn ¶
func (s *Server) StartConn(conn IConnection)
func (*Server) StartHeartbeat ¶
StartHeartbeat 启动心跳检测 interval 每次发送心跳的时间间隔
func (*Server) StartHeartbeatWithOption ¶
func (s *Server) StartHeartbeatWithOption(interval time.Duration, option *HeartbeatOption)
StartHeartbeatWithOption 启动心跳检测 option 心跳检测的配置
func (*Server) Use ¶
func (s *Server) Use(Handlers ...RouterHandler) IRouterSlices
type TLVDecoder ¶
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) StartReader ¶
func (c *WsConnection) StartReader()
StartReader 读消息Goroutine,用于从客户端中读取数据
func (*WsConnection) StartWriter ¶
func (c *WsConnection) StartWriter()
StartWriter 写消息Goroutine, 用户将数据发送给客户端
Source Files ¶
- accept_delay.go
- chain.go
- chain_builder.go
- client.go
- conn_manager.go
- connection.go
- crc.go
- data_pack.go
- data_pack_ltv_little_endian.go
- data_pack_tlv_big_endian.go
- decoder.go
- default_router_func.go
- frame_decoder.go
- heartbeat.go
- htlv_crc_decoder.go
- interceptor.go
- length_field.go
- logo.go
- ltv_decoder_little.go
- message.go
- msg_handler.go
- options.go
- pack_factory.go
- request.go
- request_func.go
- router.go
- server.go
- tlv_decoder.go
- ws_connection.go