Documentation ¶
Overview ¶
Package server 提供了包含多种网络类型的服务器实现
Index ¶
- Constants
- Variables
- func HasMessageType(mt MessageType) bool
- func PushAsyncMessage(srv *Server, caller func() error, callback func(err error), mark ...any)
- func PushCrossMessage(srv *Server, crossName string, serverId int64, packet []byte, mark ...any)
- func PushErrorMessage(srv *Server, err error, action MessageErrorAction, mark ...any)
- func PushPacketMessage(srv *Server, conn *Conn, wst int, packet []byte, mark ...any)
- func PushSystemMessage(srv *Server, handle func(), mark ...any)
- func PushTickerMessage(srv *Server, caller func(), mark ...any)
- func SetMessagePacketVisualizer(handle func(packet []byte) string)
- type Conn
- func (slf *Conn) Close(err ...error)
- func (slf *Conn) GetData(key any) any
- func (slf *Conn) GetID() string
- func (slf *Conn) GetIP() string
- func (slf *Conn) GetMessageData(key any) any
- func (slf *Conn) GetWST() int
- func (slf *Conn) IsClosed() bool
- func (slf *Conn) IsEmpty() bool
- func (slf *Conn) IsWebsocket() bool
- func (slf *Conn) ReleaseData() *Conn
- func (slf *Conn) RemoteAddr() net.Addr
- func (slf *Conn) SetData(key, value any) *Conn
- func (slf *Conn) SetMessageData(key, value any) *Conn
- func (slf *Conn) SetWST(wst int) *Conn
- func (slf *Conn) Write(packet []byte, callback ...func(err error))
- type ConnReadonly
- type ConnectionClosedEventHandle
- type ConnectionOpenedAfterEventHandle
- type ConnectionOpenedEventHandle
- type ConnectionPacketPreprocessEventHandle
- type ConnectionReceivePacketEventHandle
- type ConnectionWritePacketBeforeEventHandle
- type ConsoleCommandEventHandle
- type ContextPacker
- type Cross
- type HandlerFunc
- type Http
- type HttpContext
- type HttpRouter
- func (slf *HttpRouter[Context]) Any(relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
- func (slf *HttpRouter[Context]) CONNECT(relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
- func (slf *HttpRouter[Context]) DELETE(relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
- func (slf *HttpRouter[Context]) GET(relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
- func (slf *HttpRouter[Context]) Group(relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
- func (slf *HttpRouter[Context]) HEAD(relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
- func (slf *HttpRouter[Context]) Handle(httpMethod, relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
- func (slf *HttpRouter[Context]) Match(methods []string, relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
- func (slf *HttpRouter[Context]) OPTIONS(relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
- func (slf *HttpRouter[Context]) PATCH(relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
- func (slf *HttpRouter[Context]) POST(relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
- func (slf *HttpRouter[Context]) PUT(relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
- func (slf *HttpRouter[Context]) Static(relativePath, root string) *HttpRouter[Context]
- func (slf *HttpRouter[Context]) StaticFS(relativePath string, fs http.FileSystem) *HttpRouter[Context]
- func (slf *HttpRouter[Context]) StaticFile(relativePath, filepath string) *HttpRouter[Context]
- func (slf *HttpRouter[Context]) StaticFileFS(relativePath, filepath string, fs http.FileSystem) *HttpRouter[Context]
- func (slf *HttpRouter[Context]) TRACE(relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
- type HttpWrapper
- func (slf *HttpWrapper[CTX]) Any(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
- func (slf *HttpWrapper[CTX]) Connect(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
- func (slf *HttpWrapper[CTX]) DELETE(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
- func (slf *HttpWrapper[CTX]) GET(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
- func (slf *HttpWrapper[CTX]) Group(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapperGroup[CTX]
- func (slf *HttpWrapper[CTX]) HEAD(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
- func (slf *HttpWrapper[CTX]) Handle(httpMethod, relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
- func (slf *HttpWrapper[CTX]) Match(methods []string, relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
- func (slf *HttpWrapper[CTX]) OPTIONS(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
- func (slf *HttpWrapper[CTX]) PATCH(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
- func (slf *HttpWrapper[CTX]) POST(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
- func (slf *HttpWrapper[CTX]) PUT(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
- func (slf *HttpWrapper[CTX]) Static(relativePath, root string) *HttpWrapper[CTX]
- func (slf *HttpWrapper[CTX]) StaticFS(relativePath string, fs http.FileSystem) *HttpWrapper[CTX]
- func (slf *HttpWrapper[CTX]) StaticFile(relativePath, filepath string) *HttpWrapper[CTX]
- func (slf *HttpWrapper[CTX]) Trace(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
- func (slf *HttpWrapper[CTX]) Use(middleware ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
- type HttpWrapperGroup
- func (slf *HttpWrapperGroup[CTX]) DELETE(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapperGroup[CTX]
- func (slf *HttpWrapperGroup[CTX]) GET(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapperGroup[CTX]
- func (slf *HttpWrapperGroup[CTX]) Group(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapperGroup[CTX]
- func (slf *HttpWrapperGroup[CTX]) Handle(httpMethod, relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapperGroup[CTX]
- func (slf *HttpWrapperGroup[CTX]) OPTIONS(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapperGroup[CTX]
- func (slf *HttpWrapperGroup[CTX]) PATCH(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapperGroup[CTX]
- func (slf *HttpWrapperGroup[CTX]) POST(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapperGroup[CTX]
- func (slf *HttpWrapperGroup[CTX]) PUT(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapperGroup[CTX]
- func (slf *HttpWrapperGroup[CTX]) Use(middleware ...HttpWrapperHandleFunc[CTX]) *HttpWrapperGroup[CTX]
- type HttpWrapperHandleFunc
- type Message
- func (slf *Message) AttrsString() string
- func (slf *Message) GetAsyncMessageAttrs() (caller func() error, callback func(err error), hasCallback bool)
- func (slf *Message) GetCrossMessageAttrs() (serverId int64, packet []byte)
- func (slf *Message) GetErrorMessageAttrs() (err error, action MessageErrorAction)
- func (slf *Message) GetPacketMessageAttrs() (conn *Conn, packet []byte)
- func (slf *Message) GetSystemMessageAttrs() (handle func())
- func (slf *Message) GetTickerMessageAttrs() (caller func())
- func (slf *Message) MessageType() MessageType
- func (slf *Message) String() string
- type MessageErrorAction
- type MessageErrorEventHandle
- type MessageExecBeforeEventHandle
- type MessageLowExecEventHandle
- type MessageReadyEventHandle
- type MessageType
- type MultipleServer
- type Network
- type Option
- func WithAsyncPoolSize(size int) Option
- func WithCross(crossName string, serverId int64, cross Cross) Option
- func WithDeadlockDetect(t time.Duration) Option
- func WithDisableAsyncMessage() Option
- func WithGRPCServerOptions(options ...grpc.ServerOption) Option
- func WithMessageBufferSize(size int) Option
- func WithMessageChannelSize(size int) Option
- func WithPProf(pattern ...string) Option
- func WithRunMode(mode RunMode) Option
- func WithShunt(channelGenerator func(guid int64) chan *Message, ...) Option
- func WithTLS(certFile, keyFile string) Option
- func WithTicker(size int, autonomy bool) Option
- func WithWebsocketCompression(level int) Option
- func WithWebsocketMessageType(messageTypes ...int) Option
- func WithWebsocketReadDeadline(t time.Duration) Option
- func WithWebsocketWriteCompression() Option
- type ReceiveCrossPacketEventHandle
- type RunMode
- type Server
- func (slf *Server) CloseConn(id string)
- func (slf *Server) Context() context.Context
- func (slf *Server) GRPCServer() *grpc.Server
- func (slf *Server) GetID() int64
- func (slf *Server) GetMessageCount() int64
- func (slf *Server) GetOnline(id string) *Conn
- func (slf *Server) GetOnlineAll() map[string]*Conn
- func (slf *Server) GetOnlineCount() int
- func (slf *Server) HttpRouter() gin.IRouterdeprecated
- func (slf *Server) HttpServer() *Http[*HttpContext]
- func (slf *Server) IsOnline(id string) bool
- func (slf Server) OnConnectionClosedEvent(conn *Conn, err any)
- func (slf Server) OnConnectionOpenedAfterEvent(conn *Conn)
- func (slf Server) OnConnectionOpenedEvent(conn *Conn)
- func (slf Server) OnConnectionPacketPreprocessEvent(conn *Conn, packet []byte, usePacket func(newPacket []byte)) bool
- func (slf Server) OnConnectionReceivePacketEvent(conn *Conn, packet []byte)
- func (slf Server) OnConnectionWritePacketBeforeEvent(conn *Conn, packet []byte) (newPacket []byte)
- func (slf Server) OnConsoleCommandEvent(command string)
- func (slf Server) OnMessageErrorEvent(message *Message, err error)
- func (slf Server) OnMessageExecBeforeEvent(message *Message) bool
- func (slf Server) OnMessageLowExecEvent(message *Message, cost time.Duration)
- func (slf Server) OnMessageReadyEvent()
- func (slf Server) OnReceiveCrossPacketEvent(serverId int64, packet []byte)
- func (slf Server) OnShuntChannelClosedEvent(guid int64)
- func (slf Server) OnShuntChannelCreatedEvent(guid int64)
- func (slf Server) OnStartBeforeEvent()
- func (slf Server) OnStartFinishEvent()
- func (slf Server) OnStopEvent()
- func (slf Server) RegConnectionClosedEvent(handle ConnectionClosedEventHandle, priority ...int)
- func (slf Server) RegConnectionOpenedAfterEvent(handle ConnectionOpenedAfterEventHandle, priority ...int)
- func (slf Server) RegConnectionOpenedEvent(handle ConnectionOpenedEventHandle, priority ...int)
- func (slf Server) RegConnectionPacketPreprocessEvent(handle ConnectionPacketPreprocessEventHandle, priority ...int)
- func (slf Server) RegConnectionReceivePacketEvent(handle ConnectionReceivePacketEventHandle, priority ...int)
- func (slf Server) RegConnectionWritePacketBeforeEvent(handle ConnectionWritePacketBeforeEventHandle, priority ...int)
- func (slf Server) RegConsoleCommandEvent(command string, handle ConsoleCommandEventHandle, priority ...int)
- func (slf Server) RegMessageErrorEvent(handle MessageErrorEventHandle, priority ...int)
- func (slf Server) RegMessageExecBeforeEvent(handle MessageExecBeforeEventHandle, priority ...int)
- func (slf Server) RegMessageLowExecEvent(handle MessageLowExecEventHandle, priority ...int)
- func (slf Server) RegMessageReadyEvent(handle MessageReadyEventHandle, priority ...int)
- func (slf Server) RegReceiveCrossPacketEvent(handle ReceiveCrossPacketEventHandle, priority ...int)
- func (slf Server) RegShuntChannelCloseEvent(handle ShuntChannelClosedEventHandle, priority ...int)
- func (slf Server) RegShuntChannelCreatedEvent(handle ShuntChannelCreatedEventHandle, priority ...int)
- func (slf Server) RegStartBeforeEvent(handle StartBeforeEventHandle, priority ...int)
- func (slf Server) RegStartFinishEvent(handle StartFinishEventHandle, priority ...int)
- func (slf Server) RegStopEvent(handle StopEventHandle, priority ...int)
- func (slf *Server) Run(addr string) error
- func (slf *Server) RunNone() error
- func (slf *Server) ShuntChannelFreed(channelGuid int64)
- func (slf *Server) Shutdown()
- func (slf *Server) Ticker() *timer.Ticker
- func (slf *Server) TimeoutContext(timeout time.Duration) (context.Context, context.CancelFunc)
- type ShuntChannelClosedEventHandle
- type ShuntChannelCreatedEventHandle
- type StartBeforeEventHandle
- type StartFinishEventHandle
- type StopEventHandle
Examples ¶
Constants ¶
const ( DefaultMessageBufferSize = 1024 DefaultMessageChannelSize = 1024 * 1024 DefaultAsyncPoolSize = 256 DefaultWebsocketReadDeadline = 30 * time.Second )
const ( // WebsocketMessageTypeText 表示文本数据消息。文本消息负载被解释为 UTF-8 编码的文本数据 WebsocketMessageTypeText = 1 // WebsocketMessageTypeBinary 表示二进制数据消息 WebsocketMessageTypeBinary = 2 // WebsocketMessageTypeClose 表示关闭控制消息。可选消息负载包含数字代码和文本。使用 FormatCloseMessage 函数来格式化关闭消息负载 WebsocketMessageTypeClose = 8 // WebsocketMessageTypePing 表示 ping 控制消息。可选的消息负载是 UTF-8 编码的文本 WebsocketMessageTypePing = 9 // WebsocketMessageTypePong 表示一个 pong 控制消息。可选的消息负载是 UTF-8 编码的文本 WebsocketMessageTypePong = 10 )
Variables ¶
var ( ErrConstructed = errors.New("the Server must be constructed using the server.New function") ErrCanNotSupportNetwork = errors.New("can not support network") ErrNetworkOnlySupportHttp = errors.New("the current network mode is not compatible with HttpRouter, only NetworkHttp is supported") ErrNetworkOnlySupportGRPC = errors.New("the current network mode is not compatible with RegGrpcServer, only NetworkGRPC is supported") ErrNetworkIncompatibleHttp = errors.New("the current network mode is not compatible with NetworkHttp") ErrWebsocketIllegalMessageType = errors.New("illegal message type") ErrNoSupportCross = errors.New("the server does not support GetID or PushCrossMessage, please use the WithCross option to create the server") ErrNoSupportTicker = errors.New("the server does not support Ticker, please use the WithTicker option to create the server") )
Functions ¶
func HasMessageType ¶ added in v0.1.3
func HasMessageType(mt MessageType) bool
HasMessageType 检查是否存在指定的消息类型
func PushAsyncMessage ¶ added in v0.0.10
PushAsyncMessage 向特定服务器中推送 MessageTypeAsync 消息
- 异步消息将在服务器的异步消息队列中进行处理,处理完成 caller 的阻塞操作后,将会通过系统消息执行 callback 函数
- callback 函数将在异步消息处理完成后进行调用,无论过程是否产生 err,都将被执行,允许为 nil
- 需要注意的是,为了避免并发问题,caller 函数请仅处理阻塞操作,其他操作应该在 callback 函数中进行
在通过 WithShunt 使用分流服务器时,异步消息不会转换到分流通道中进行处理。依旧需要注意上方第三条
func PushCrossMessage ¶ added in v0.0.10
PushCrossMessage 向特定服务器中推送 MessageTypeCross 消息
func PushErrorMessage ¶ added in v0.0.10
func PushErrorMessage(srv *Server, err error, action MessageErrorAction, mark ...any)
PushErrorMessage 向特定服务器中推送 MessageTypeError 消息
func PushPacketMessage ¶ added in v0.0.10
PushPacketMessage 向特定服务器中推送 MessageTypePacket 消息
func PushSystemMessage ¶ added in v0.0.16
PushSystemMessage 向特定服务器中推送 MessageTypeSystem 消息
func PushTickerMessage ¶ added in v0.0.10
PushTickerMessage 向特定服务器中推送 MessageTypeTicker 消息
func SetMessagePacketVisualizer ¶ added in v0.0.14
SetMessagePacketVisualizer 设置消息可视化函数
- 消息可视化将在慢消息等情况用于打印,使用自定消息可视化函数可以便于开发者进行调试
- 默认的消息可视化函数将直接返回消息的字符串表示
Types ¶
type Conn ¶
type Conn struct {
// contains filtered or unexported fields
}
Conn 服务器连接单次会话的包装
func NewEmptyConn ¶ added in v0.0.21
NewEmptyConn 创建一个适用于测试的空连接
func (*Conn) GetMessageData ¶ added in v0.1.0
GetMessageData 获取消息数据
func (*Conn) SetMessageData ¶ added in v0.1.0
SetMessageData 设置消息数据,该数据将在消息处理完成后释放
type ConnReadonly ¶ added in v0.0.4
type ConnReadonly interface { // RemoteAddr 获取远程地址 RemoteAddr() net.Addr // GetID 获取连接 ID GetID() string // GetIP 获取连接 IP GetIP() string // GetData 获取连接数据 GetData(key any) any // IsWebsocket 是否是 websocket 连接 IsWebsocket() bool }
ConnReadonly 连接只读接口
type ConnectionOpenedAfterEventHandle ¶ added in v0.0.21
type ConnectionPacketPreprocessEventHandle ¶ added in v0.0.28
type ConnectionWritePacketBeforeEventHandle ¶ added in v0.0.21
type ConsoleCommandEventHandle ¶
type ConsoleCommandEventHandle func(srv *Server)
type ContextPacker ¶ added in v0.0.29
type Cross ¶
type Cross interface { // Init 初始化跨服 // - serverId: 本服id // - packetHandle.serverId: 发送跨服消息的服务器id // - packetHandle.packet: 数据包 Init(server *Server, packetHandle func(serverId int64, packet []byte)) error // PushMessage 推送跨服消息 // - serverId: 目标服务器id PushMessage(serverId int64, packet []byte) error // Release 释放资源 Release() }
Cross 跨服接口
type HandlerFunc ¶ added in v0.0.29
type HandlerFunc[Context any] func(ctx Context)
type Http ¶ added in v0.0.29
type Http[Context any] struct { *HttpRouter[Context] // contains filtered or unexported fields }
Http 基于 gin.Engine 包装的 http 服务器
func NewHttpHandleWrapper ¶ added in v0.0.29
func NewHttpHandleWrapper[Context any](srv *Server, packer ContextPacker[Context]) *Http[Context]
NewHttpHandleWrapper 创建一个新的 http 处理程序包装器
- 默认使用 server.HttpContext 作为上下文,如果需要依赖其作为新的上下文,可以通过 NewHttpContext 创建
type HttpContext ¶ added in v0.0.29
type HttpContext struct {
// contains filtered or unexported fields
}
HttpContext 基于 gin.Context 的 http 请求上下文
func NewHttpContext ¶ added in v0.0.29
func NewHttpContext(ctx *gin.Context) *HttpContext
NewHttpContext 基于 gin.Context 创建一个新的 HttpContext
func (*HttpContext) Gin ¶ added in v0.0.29
func (slf *HttpContext) Gin() *gin.Context
Gin 获取 gin.Context
func (*HttpContext) ReadTo ¶ added in v0.0.29
func (slf *HttpContext) ReadTo(dest any) error
ReadTo 读取请求数据到指定结构体,如果失败则返回错误
type HttpRouter ¶ added in v0.0.29
type HttpRouter[Context any] struct { // contains filtered or unexported fields }
func (*HttpRouter[Context]) Any ¶ added in v0.0.29
func (slf *HttpRouter[Context]) Any(relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
Any 注册一个匹配所有 HTTP 方法的路由
- GET, POST, PUT, PATCH, HEAD, OPTIONS, DELETE, CONNECT, TRACE.
func (*HttpRouter[Context]) CONNECT ¶ added in v0.0.29
func (slf *HttpRouter[Context]) CONNECT(relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
CONNECT 是 Handle("CONNECT", path, handlers) 的快捷方式
func (*HttpRouter[Context]) DELETE ¶ added in v0.0.29
func (slf *HttpRouter[Context]) DELETE(relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
DELETE 是 Handle("DELETE", path, handlers) 的快捷方式
func (*HttpRouter[Context]) GET ¶ added in v0.0.29
func (slf *HttpRouter[Context]) GET(relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
GET 是 Handle("GET", path, handlers) 的快捷方式
func (*HttpRouter[Context]) Group ¶ added in v0.0.29
func (slf *HttpRouter[Context]) Group(relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
Group 创建一个新的路由组。您应该添加所有具有共同中间件的路由。
- 例如: v1 := slf.Group("/v1")
func (*HttpRouter[Context]) HEAD ¶ added in v0.0.29
func (slf *HttpRouter[Context]) HEAD(relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
HEAD 是 Handle("HEAD", path, handlers) 的快捷方式
func (*HttpRouter[Context]) Handle ¶ added in v0.0.29
func (slf *HttpRouter[Context]) Handle(httpMethod, relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
Handle 使用给定的路径和方法注册新的请求句柄和中间件
- 最后一个处理程序应该是真正的处理程序,其他处理程序应该是可以而且应该在不同路由之间共享的中间件。
func (*HttpRouter[Context]) Match ¶ added in v0.0.29
func (slf *HttpRouter[Context]) Match(methods []string, relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
Match 注册一个匹配指定 HTTP 方法的路由
- GET, POST, PUT, PATCH, HEAD, OPTIONS, DELETE, CONNECT, TRACE.
func (*HttpRouter[Context]) OPTIONS ¶ added in v0.0.29
func (slf *HttpRouter[Context]) OPTIONS(relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
OPTIONS 是 Handle("OPTIONS", path, handlers) 的快捷方式
func (*HttpRouter[Context]) PATCH ¶ added in v0.0.29
func (slf *HttpRouter[Context]) PATCH(relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
PATCH 是 Handle("PATCH", path, handlers) 的快捷方式
func (*HttpRouter[Context]) POST ¶ added in v0.0.29
func (slf *HttpRouter[Context]) POST(relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
POST 是 Handle("POST", path, handlers) 的快捷方式
func (*HttpRouter[Context]) PUT ¶ added in v0.0.29
func (slf *HttpRouter[Context]) PUT(relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
PUT 是 Handle("PUT", path, handlers) 的快捷方式
func (*HttpRouter[Context]) Static ¶ added in v0.0.29
func (slf *HttpRouter[Context]) Static(relativePath, root string) *HttpRouter[Context]
Static 提供来自给定文件系统根目录的文件。
- 例如: Static("/static", "/var/www")
func (*HttpRouter[Context]) StaticFS ¶ added in v0.0.29
func (slf *HttpRouter[Context]) StaticFS(relativePath string, fs http.FileSystem) *HttpRouter[Context]
StaticFS 与 `Static` 类似,但可以使用自定义的 `http.FileSystem` 代替。
- 例如: StaticFS("/static", Dir{"/var/www", false})
- 由于依赖于 gin.Engine 默认情况下使用:gin.Dir
func (*HttpRouter[Context]) StaticFile ¶ added in v0.0.29
func (slf *HttpRouter[Context]) StaticFile(relativePath, filepath string) *HttpRouter[Context]
StaticFile 注册单个路由以便为本地文件系统的单个文件提供服务。
- 例如: StaticFile("favicon.ico", "./resources/favicon.ico")
func (*HttpRouter[Context]) StaticFileFS ¶ added in v0.0.29
func (slf *HttpRouter[Context]) StaticFileFS(relativePath, filepath string, fs http.FileSystem) *HttpRouter[Context]
StaticFileFS 与 `StaticFile` 类似,但可以使用自定义的 `http.FileSystem` 代替。
- 例如: StaticFileFS("favicon.ico", "./resources/favicon.ico", Dir{".", false})
- 由于依赖于 gin.Engine 默认情况下使用:gin.Dir
func (*HttpRouter[Context]) TRACE ¶ added in v0.0.29
func (slf *HttpRouter[Context]) TRACE(relativePath string, handlers ...HandlerFunc[Context]) *HttpRouter[Context]
TRACE 是 Handle("TRACE", path, handlers) 的快捷方式
type HttpWrapper ¶ added in v0.0.26
type HttpWrapper[CTX any] struct { // contains filtered or unexported fields }
HttpWrapper http 包装器
func NewGinWrapper ¶ added in v0.0.29
NewGinWrapper 创建 gin 包装器,用于对 NewHttpWrapper 函数的替代
func NewHttpWrapper
deprecated
added in
v0.0.26
func NewHttpWrapper[CTX any](server *Server, pack func(ctx *gin.Context) CTX) *HttpWrapper[CTX]
NewHttpWrapper 创建 http 包装器
Deprecated: 从 Minotaur 0.0.29 开始,由于该函数基于 *Server.HttpRouter 函数设计,已弃用。 如果需要单纯的对 *gin.Engine 进行包装,可以使用 NewGinWrapper 函数进行包装。该函数已不在建议对 server.Server 使用。 如果需要对 Server.HttpServer 进行包装,可以使用 NewHttpHandleWrapper 函数进行包装。
func (*HttpWrapper[CTX]) Any ¶ added in v0.0.26
func (slf *HttpWrapper[CTX]) Any(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
Any 注册 Any 请求
func (*HttpWrapper[CTX]) Connect ¶ added in v0.0.26
func (slf *HttpWrapper[CTX]) Connect(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
Connect 注册 Connect 请求
func (*HttpWrapper[CTX]) DELETE ¶ added in v0.0.26
func (slf *HttpWrapper[CTX]) DELETE(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
DELETE 注册 DELETE 请求
func (*HttpWrapper[CTX]) GET ¶ added in v0.0.26
func (slf *HttpWrapper[CTX]) GET(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
GET 注册 GET 请求
func (*HttpWrapper[CTX]) Group ¶ added in v0.0.26
func (slf *HttpWrapper[CTX]) Group(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapperGroup[CTX]
Group 创建一个新的路由组。您应该添加所有具有共同中间件的路由。
func (*HttpWrapper[CTX]) HEAD ¶ added in v0.0.26
func (slf *HttpWrapper[CTX]) HEAD(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
HEAD 注册 HEAD 请求
func (*HttpWrapper[CTX]) Handle ¶ added in v0.0.26
func (slf *HttpWrapper[CTX]) Handle(httpMethod, relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
Handle 处理请求
func (*HttpWrapper[CTX]) Match ¶ added in v0.0.26
func (slf *HttpWrapper[CTX]) Match(methods []string, relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
Match 注册与您声明的指定方法相匹配的路由。
func (*HttpWrapper[CTX]) OPTIONS ¶ added in v0.0.26
func (slf *HttpWrapper[CTX]) OPTIONS(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
OPTIONS 注册 OPTIONS 请求
func (*HttpWrapper[CTX]) PATCH ¶ added in v0.0.26
func (slf *HttpWrapper[CTX]) PATCH(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
PATCH 注册 PATCH 请求
func (*HttpWrapper[CTX]) POST ¶ added in v0.0.26
func (slf *HttpWrapper[CTX]) POST(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
POST 注册 POST 请求
func (*HttpWrapper[CTX]) PUT ¶ added in v0.0.26
func (slf *HttpWrapper[CTX]) PUT(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
PUT 注册 PUT 请求
func (*HttpWrapper[CTX]) Static ¶ added in v0.0.26
func (slf *HttpWrapper[CTX]) Static(relativePath, root string) *HttpWrapper[CTX]
Static 注册 Static 请求
func (*HttpWrapper[CTX]) StaticFS ¶ added in v0.0.26
func (slf *HttpWrapper[CTX]) StaticFS(relativePath string, fs http.FileSystem) *HttpWrapper[CTX]
StaticFS 注册 StaticFS 请求
func (*HttpWrapper[CTX]) StaticFile ¶ added in v0.0.26
func (slf *HttpWrapper[CTX]) StaticFile(relativePath, filepath string) *HttpWrapper[CTX]
StaticFile 注册 StaticFile 请求
func (*HttpWrapper[CTX]) Trace ¶ added in v0.0.26
func (slf *HttpWrapper[CTX]) Trace(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
Trace 注册 Trace 请求
func (*HttpWrapper[CTX]) Use ¶ added in v0.0.26
func (slf *HttpWrapper[CTX]) Use(middleware ...HttpWrapperHandleFunc[CTX]) *HttpWrapper[CTX]
Use 使用中间件
type HttpWrapperGroup ¶ added in v0.0.26
type HttpWrapperGroup[CTX any] struct { // contains filtered or unexported fields }
HttpWrapperGroup http 包装器
func (*HttpWrapperGroup[CTX]) DELETE ¶ added in v0.0.26
func (slf *HttpWrapperGroup[CTX]) DELETE(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapperGroup[CTX]
DELETE 注册 DELETE 请求
func (*HttpWrapperGroup[CTX]) GET ¶ added in v0.0.26
func (slf *HttpWrapperGroup[CTX]) GET(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapperGroup[CTX]
GET 注册 GET 请求
func (*HttpWrapperGroup[CTX]) Group ¶ added in v0.0.26
func (slf *HttpWrapperGroup[CTX]) Group(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapperGroup[CTX]
Group 创建分组
func (*HttpWrapperGroup[CTX]) Handle ¶ added in v0.0.26
func (slf *HttpWrapperGroup[CTX]) Handle(httpMethod, relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapperGroup[CTX]
Handle 处理请求
func (*HttpWrapperGroup[CTX]) OPTIONS ¶ added in v0.0.26
func (slf *HttpWrapperGroup[CTX]) OPTIONS(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapperGroup[CTX]
OPTIONS 注册 OPTIONS 请求
func (*HttpWrapperGroup[CTX]) PATCH ¶ added in v0.0.26
func (slf *HttpWrapperGroup[CTX]) PATCH(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapperGroup[CTX]
PATCH 注册 PATCH 请求
func (*HttpWrapperGroup[CTX]) POST ¶ added in v0.0.26
func (slf *HttpWrapperGroup[CTX]) POST(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapperGroup[CTX]
POST 注册 POST 请求
func (*HttpWrapperGroup[CTX]) PUT ¶ added in v0.0.26
func (slf *HttpWrapperGroup[CTX]) PUT(relativePath string, handlers ...HttpWrapperHandleFunc[CTX]) *HttpWrapperGroup[CTX]
PUT 注册 PUT 请求
func (*HttpWrapperGroup[CTX]) Use ¶ added in v0.0.26
func (slf *HttpWrapperGroup[CTX]) Use(middleware ...HttpWrapperHandleFunc[CTX]) *HttpWrapperGroup[CTX]
Use 使用中间件
type HttpWrapperHandleFunc ¶ added in v0.0.26
type HttpWrapperHandleFunc[CTX any] func(ctx CTX)
type Message ¶
type Message struct {
// contains filtered or unexported fields
}
Message 服务器消息
func (*Message) AttrsString ¶ added in v0.1.5
AttrsString 返回消息属性的字符串表示
func (*Message) GetAsyncMessageAttrs ¶ added in v0.1.3
func (slf *Message) GetAsyncMessageAttrs() (caller func() error, callback func(err error), hasCallback bool)
GetAsyncMessageAttrs 获取消息中的异步消息属性
func (*Message) GetCrossMessageAttrs ¶ added in v0.1.3
GetCrossMessageAttrs 获取消息中的跨服属性
func (*Message) GetErrorMessageAttrs ¶ added in v0.1.3
func (slf *Message) GetErrorMessageAttrs() (err error, action MessageErrorAction)
GetErrorMessageAttrs 获取消息中的错误属性
func (*Message) GetPacketMessageAttrs ¶ added in v0.1.3
GetPacketMessageAttrs 获取消息中的数据包属性
func (*Message) GetSystemMessageAttrs ¶ added in v0.1.3
func (slf *Message) GetSystemMessageAttrs() (handle func())
GetSystemMessageAttrs 获取消息中的系统消息属性
func (*Message) GetTickerMessageAttrs ¶ added in v0.1.3
func (slf *Message) GetTickerMessageAttrs() (caller func())
GetTickerMessageAttrs 获取消息中的定时器属性
func (*Message) MessageType ¶ added in v0.1.3
func (slf *Message) MessageType() MessageType
MessageType 返回消息类型
type MessageErrorAction ¶
type MessageErrorAction byte
MessageErrorAction 错误消息类型操作
const ( MessageErrorActionNone MessageErrorAction = iota + 1 // 错误消息类型操作:将不会被进行任何特殊处理,仅进行日志输出 MessageErrorActionShutdown // 错误消息类型操作:当接收到该类型的操作时,服务器将执行 Server.shutdown 函数 )
func (MessageErrorAction) String ¶
func (slf MessageErrorAction) String() string
type MessageErrorEventHandle ¶
type MessageExecBeforeEventHandle ¶ added in v0.1.3
type MessageReadyEventHandle ¶ added in v0.1.4
type MessageReadyEventHandle func(srv *Server)
type MessageType ¶
type MessageType byte
MessageType 消息类型
const ( // MessageTypePacket 数据包消息类型:该类型的数据将被发送到 ConnectionReceivePacketEvent 进行处理 MessageTypePacket MessageType = iota // MessageTypeError 错误消息类型:根据不同的错误状态,将交由 Server 进行统一处理 MessageTypeError // MessageTypeCross 跨服消息类型:将被推送到跨服的 Cross 实现中进行处理 MessageTypeCross // MessageTypeTicker 定时器消息类型 MessageTypeTicker // MessageTypeAsync 异步消息类型 MessageTypeAsync // MessageTypeAsyncCallback 异步回调消息类型 MessageTypeAsyncCallback // MessageTypeSystem 系统消息类型 MessageTypeSystem )
type MultipleServer ¶
type MultipleServer struct {
// contains filtered or unexported fields
}
func NewMultipleServer ¶
func NewMultipleServer(serverHandle ...func() (addr string, srv *Server)) *MultipleServer
func (*MultipleServer) OnExitEvent ¶ added in v0.0.4
func (slf *MultipleServer) OnExitEvent()
func (*MultipleServer) RegExitEvent ¶ added in v0.0.4
func (slf *MultipleServer) RegExitEvent(handle func())
RegExitEvent 注册退出事件
func (*MultipleServer) Run ¶
func (slf *MultipleServer) Run()
type Network ¶
type Network string
const ( // NetworkNone 该模式下不监听任何网络端口,仅开启消息队列,适用于纯粹的跨服服务器等情况 NetworkNone Network = "none" NetworkTcp Network = "tcp" NetworkTcp4 Network = "tcp4" NetworkTcp6 Network = "tcp6" NetworkUdp Network = "udp" NetworkUdp4 Network = "udp4" NetworkUdp6 Network = "udp6" NetworkUnix Network = "unix" NetworkHttp Network = "http" // NetworkWebsocket 该模式下需要获取url参数值时,可以通过连接的GetData函数获取 // - 当有多个同名参数时,获取到的值为切片类型 NetworkWebsocket Network = "websocket" NetworkKcp Network = "kcp" NetworkGRPC Network = "grpc" )
type Option ¶
type Option func(srv *Server)
func WithAsyncPoolSize ¶ added in v0.0.10
WithAsyncPoolSize 通过指定异步消息池大小的方式创建服务器
- 当通过 WithDisableAsyncMessage 禁用异步消息时,此选项无效
- 默认值为 DefaultAsyncPoolSize
func WithCross ¶
WithCross 通过跨服的方式创建服务器
- 推送跨服消息时,将推送到对应 crossName 的跨服中间件中,crossName 可以满足不同功能采用不同的跨服/消息中间件
- 通常情况下 crossName 仅需一个即可
func WithDeadlockDetect ¶ added in v0.0.10
WithDeadlockDetect 通过死锁、死循环、永久阻塞检测的方式创建服务器
- 当检测到死锁、死循环、永久阻塞时,服务器将会生成 WARN 类型的日志,关键字为 "SuspectedDeadlock"
- 默认不开启死锁检测
func WithDisableAsyncMessage ¶ added in v0.0.10
func WithDisableAsyncMessage() Option
WithDisableAsyncMessage 通过禁用异步消息的方式创建服务器
func WithGRPCServerOptions ¶
func WithGRPCServerOptions(options ...grpc.ServerOption) Option
WithGRPCServerOptions 通过GRPC的可选项创建GRPC服务器
func WithMessageBufferSize ¶
WithMessageBufferSize 通过特定的消息缓冲池大小运行服务器
- 默认大小为 DefaultMessageBufferSize
- 消息数量超出这个值的时候,消息处理将会造成更大的开销(频繁创建新的结构体),同时服务器将输出警告内容
func WithMessageChannelSize ¶ added in v0.0.12
WithMessageChannelSize 通过指定消息通道大小的方式创建服务器
- 足够大的消息通道可以确保服务器在短时间内接收到大量的消息而不至于阻塞
- 默认值为 DefaultMessageChannelSize
func WithShunt ¶ added in v0.0.24
func WithShunt(channelGenerator func(guid int64) chan *Message, shuntMatcher func(conn *Conn) (guid int64, allowToCreate bool)) Option
WithShunt 通过连接数据包分流的方式创建服务器
- 在分流的情况下,将会使用分流通道处理数据包,而不是使用系统通道,消息的执行将转移到对应的分流通道内进行串行处理,默认情况下所有消息都是串行处理的,适用于例如不同游戏房间并行处理,游戏房间内部消息串行处理的情况
- channelGenerator:用于生成分流通道的函数
- shuntMatcher:用于匹配连接的函数,返回值为分流通道的 GUID 和是否允许创建新的分流通道,当返回不允许创建新的分流通道时,将会使用使用默认的系统通道
将被分流的消息类型(更多类型有待斟酌):
- MessageTypePacket
注意事项:
- 需要在分流通道使用完成后主动调用 Server.ShuntChannelFreed 函数释放分流通道,避免内存泄漏
func WithWebsocketCompression ¶ added in v0.0.12
WithWebsocketCompression 通过数据压缩的方式创建Websocket服务器
- 默认不开启数据压缩
func WithWebsocketMessageType ¶
WithWebsocketMessageType 设置仅支持特定类型的Websocket消息
func WithWebsocketReadDeadline ¶ added in v0.0.8
WithWebsocketReadDeadline 设置 Websocket 读取超时时间
- 默认: DefaultWebsocketReadDeadline
- 当 t <= 0 时,表示不设置超时时间
func WithWebsocketWriteCompression ¶ added in v0.0.12
func WithWebsocketWriteCompression() Option
WithWebsocketWriteCompression 通过数据写入压缩的方式创建Websocket服务器
- 默认不开启数据压缩
type RunMode ¶ added in v0.0.13
const ( RunModeDev RunMode = log.RunModeDev RunModeProd RunMode = log.RunModeProd RunModeTest RunMode = log.RunModeTest )
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server 网络服务器
func New ¶
New 根据特定网络类型创建一个服务器
Example ¶
package main import ( "github.com/kercylan98/minotaur/server" "time" ) func main() { srv := server.New(server.NetworkWebsocket, server.WithDeadlockDetect(time.Second*5), server.WithPProf("/debug/pprof"), ) srv.RegConnectionReceivePacketEvent(func(srv *server.Server, conn *server.Conn, packet []byte) { conn.Write(packet) }) go func() { time.Sleep(1 * time.Second); srv.Shutdown() }() if err := srv.Run(":9999"); err != nil { panic(err) } }
Output:
func (*Server) GRPCServer ¶
GRPCServer 当网络类型为 NetworkGRPC 时将被允许获取 grpc 服务器,否则将会发生 panic
func (*Server) GetMessageCount ¶ added in v0.0.29
GetMessageCount 获取当前服务器中消息的数量
func (*Server) GetOnlineAll ¶ added in v0.0.12
GetOnlineAll 获取所有在线连接
func (*Server) GetOnlineCount ¶ added in v0.0.12
GetOnlineCount 获取在线人数
func (*Server) HttpRouter
deprecated
func (*Server) HttpServer ¶ added in v0.0.29
func (slf *Server) HttpServer() *Http[*HttpContext]
HttpServer 替代 HttpRouter 的函数,返回一个 *Http[*HttpContext] 对象
- 通过该函数注册的路由将在服务器关闭时正常等待请求结束
- 如果需要自行包装 Context 对象,可以使用 NewHttpHandleWrapper 方法
func (Server) OnConnectionClosedEvent ¶
func (Server) OnConnectionOpenedAfterEvent ¶ added in v0.0.21
func (slf Server) OnConnectionOpenedAfterEvent(conn *Conn)
func (Server) OnConnectionOpenedEvent ¶
func (slf Server) OnConnectionOpenedEvent(conn *Conn)
func (Server) OnConnectionPacketPreprocessEvent ¶ added in v0.0.28
func (Server) OnConnectionReceivePacketEvent ¶
func (Server) OnConnectionWritePacketBeforeEvent ¶ added in v0.0.21
func (Server) OnConsoleCommandEvent ¶
func (slf Server) OnConsoleCommandEvent(command string)
func (Server) OnMessageErrorEvent ¶
func (Server) OnMessageExecBeforeEvent ¶ added in v0.1.3
func (Server) OnMessageLowExecEvent ¶
func (Server) OnMessageReadyEvent ¶ added in v0.1.4
func (slf Server) OnMessageReadyEvent()
func (Server) OnReceiveCrossPacketEvent ¶
func (Server) OnShuntChannelClosedEvent ¶ added in v0.0.24
func (slf Server) OnShuntChannelClosedEvent(guid int64)
func (Server) OnShuntChannelCreatedEvent ¶ added in v0.0.24
func (slf Server) OnShuntChannelCreatedEvent(guid int64)
func (Server) OnStartBeforeEvent ¶
func (slf Server) OnStartBeforeEvent()
func (Server) OnStartFinishEvent ¶
func (slf Server) OnStartFinishEvent()
func (Server) OnStopEvent ¶ added in v0.0.9
func (slf Server) OnStopEvent()
func (Server) RegConnectionClosedEvent ¶
func (slf Server) RegConnectionClosedEvent(handle ConnectionClosedEventHandle, priority ...int)
RegConnectionClosedEvent 在连接关闭后将立刻执行被注册的事件处理函数
func (Server) RegConnectionOpenedAfterEvent ¶ added in v0.0.21
func (slf Server) RegConnectionOpenedAfterEvent(handle ConnectionOpenedAfterEventHandle, priority ...int)
RegConnectionOpenedAfterEvent 在连接打开事件处理完成后将立刻执行被注册的事件处理函数
func (Server) RegConnectionOpenedEvent ¶
func (slf Server) RegConnectionOpenedEvent(handle ConnectionOpenedEventHandle, priority ...int)
RegConnectionOpenedEvent 在连接打开后将立刻执行被注册的事件处理函数
func (Server) RegConnectionPacketPreprocessEvent ¶ added in v0.0.28
func (slf Server) RegConnectionPacketPreprocessEvent(handle ConnectionPacketPreprocessEventHandle, priority ...int)
RegConnectionPacketPreprocessEvent 在接收到数据包后将立刻执行被注册的事件处理函数
- 预处理函数可以用于对数据包进行预处理,如解密、解压缩等
- 在调用 abort() 后,将不会再调用后续的预处理函数,也不会调用 OnConnectionReceivePacketEvent 函数
- 在调用 usePacket() 后,将使用新的数据包,而不会使用原始数据包,同时阻止后续的预处理函数的调用
场景:
- 数据包格式校验
- 数据包分包等情况处理
func (Server) RegConnectionReceivePacketEvent ¶
func (slf Server) RegConnectionReceivePacketEvent(handle ConnectionReceivePacketEventHandle, priority ...int)
RegConnectionReceivePacketEvent 在接收到数据包时将立刻执行被注册的事件处理函数
func (Server) RegConnectionWritePacketBeforeEvent ¶ added in v0.0.21
func (slf Server) RegConnectionWritePacketBeforeEvent(handle ConnectionWritePacketBeforeEventHandle, priority ...int)
RegConnectionWritePacketBeforeEvent 在发送数据包前将立刻执行被注册的事件处理函数
func (Server) RegConsoleCommandEvent ¶
func (slf Server) RegConsoleCommandEvent(command string, handle ConsoleCommandEventHandle, priority ...int)
RegConsoleCommandEvent 控制台收到指令时将立即执行被注册的事件处理函数
- 默认将注册 "exit", "quit", "close", "shutdown", "EXIT", "QUIT", "CLOSE", "SHUTDOWN" 指令作为关闭服务器的指令
- 可通过注册默认指令进行默认行为的覆盖
func (Server) RegMessageErrorEvent ¶
func (slf Server) RegMessageErrorEvent(handle MessageErrorEventHandle, priority ...int)
RegMessageErrorEvent 在处理消息发生错误时将立即执行被注册的事件处理函数
func (Server) RegMessageExecBeforeEvent ¶ added in v0.1.3
func (slf Server) RegMessageExecBeforeEvent(handle MessageExecBeforeEventHandle, priority ...int)
RegMessageExecBeforeEvent 在处理消息前将立刻执行被注册的事件处理函数
- 当返回 true 时,将继续执行后续的消息处理函数,否则将不会执行后续的消息处理函数,并且该消息将被丢弃
适用于限流等场景
func (Server) RegMessageLowExecEvent ¶
func (slf Server) RegMessageLowExecEvent(handle MessageLowExecEventHandle, priority ...int)
RegMessageLowExecEvent 在处理消息缓慢时将立即执行被注册的事件处理函数
func (Server) RegMessageReadyEvent ¶ added in v0.1.4
func (slf Server) RegMessageReadyEvent(handle MessageReadyEventHandle, priority ...int)
RegMessageReadyEvent 在服务器消息处理器准备就绪时立即执行被注册的事件处理函数
func (Server) RegReceiveCrossPacketEvent ¶
func (slf Server) RegReceiveCrossPacketEvent(handle ReceiveCrossPacketEventHandle, priority ...int)
RegReceiveCrossPacketEvent 在接收到跨服数据包时将立即执行被注册的事件处理函数
func (Server) RegShuntChannelCloseEvent ¶ added in v0.0.24
func (slf Server) RegShuntChannelCloseEvent(handle ShuntChannelClosedEventHandle, priority ...int)
RegShuntChannelCloseEvent 在分流通道关闭时将立刻执行被注册的事件处理函数
func (Server) RegShuntChannelCreatedEvent ¶ added in v0.0.24
func (slf Server) RegShuntChannelCreatedEvent(handle ShuntChannelCreatedEventHandle, priority ...int)
RegShuntChannelCreatedEvent 在分流通道创建时将立刻执行被注册的事件处理函数
func (Server) RegStartBeforeEvent ¶
func (slf Server) RegStartBeforeEvent(handle StartBeforeEventHandle, priority ...int)
RegStartBeforeEvent 在服务器初始化完成启动前立刻执行被注册的事件处理函数
func (Server) RegStartFinishEvent ¶
func (slf Server) RegStartFinishEvent(handle StartFinishEventHandle, priority ...int)
RegStartFinishEvent 在服务器启动完成时将立刻执行被注册的事件处理函数
- 需要注意该时刻服务器已经启动完成,但是还有可能未开始处理消息,客户端有可能无法连接,如果需要在消息处理器准备就绪后执行,请使用 RegMessageReadyEvent 函数
func (Server) RegStopEvent ¶ added in v0.0.9
func (slf Server) RegStopEvent(handle StopEventHandle, priority ...int)
RegStopEvent 服务器停止时将立即执行被注册的事件处理函数
func (*Server) Run ¶
Run 使用特定地址运行服务器
- server.NetworkTcp (addr:":8888")
- server.NetworkTcp4 (addr:":8888")
- server.NetworkTcp6 (addr:":8888")
- server.NetworkUdp (addr:":8888")
- server.NetworkUdp4 (addr:":8888")
- server.NetworkUdp6 (addr:":8888")
- server.NetworkUnix (addr:"socketPath")
- server.NetworkHttp (addr:":8888")
- server.NetworkWebsocket (addr:":8888/ws")
- server.NetworkKcp (addr:":8888")
- server.NetworkNone (addr:"")
func (*Server) ShuntChannelFreed ¶ added in v0.0.24
ShuntChannelFreed 释放分流通道
func (*Server) TimeoutContext ¶ added in v0.1.3
TimeoutContext 获取服务器超时上下文,context.WithTimeout 的简写
type ShuntChannelClosedEventHandle ¶ added in v0.0.24
type ShuntChannelCreatedEventHandle ¶ added in v0.0.24
type StartBeforeEventHandle ¶
type StartBeforeEventHandle func(srv *Server)
type StartFinishEventHandle ¶
type StartFinishEventHandle func(srv *Server)
type StopEventHandle ¶ added in v0.0.9
type StopEventHandle func(srv *Server)