server

package
v0.3.3 Latest Latest
Warning

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

Go to latest
Published: Nov 28, 2023 License: MIT Imports: 40 Imported by: 0

Documentation

Overview

Package server 提供了包含多种网络类型的服务器实现

Index

Examples

Constants

View Source
const (
	DefaultMessageBufferSize     = 1024
	DefaultAsyncPoolSize         = 256
	DefaultWebsocketReadDeadline = 30 * time.Second
	DefaultPacketWarnSize        = 1024 * 1024 * 1 // 1MB
)
View Source
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

View Source
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")
	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 检查是否存在指定的消息类型

Types

type Bot added in v0.3.1

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

func NewBot added in v0.3.1

func NewBot(srv *Server, options ...BotOption) *Bot

NewBot 创建一个机器人,目前仅支持 Socket 服务器

func (*Bot) JoinServer added in v0.3.1

func (slf *Bot) JoinServer()

JoinServer 加入服务器

func (*Bot) LeaveServer added in v0.3.1

func (slf *Bot) LeaveServer()

LeaveServer 离开服务器

func (*Bot) SendPacket added in v0.3.1

func (slf *Bot) SendPacket(packet []byte)

SendPacket 发送数据包到服务器

func (*Bot) SendWSPacket added in v0.3.1

func (slf *Bot) SendWSPacket(wst int, packet []byte)

SendWSPacket 发送 WebSocket 数据包到服务器

func (*Bot) SetNetworkDelay added in v0.3.1

func (slf *Bot) SetNetworkDelay(delay, fluctuation time.Duration)

SetNetworkDelay 设置网络延迟和波动范围

  • delay 延迟
  • fluctuation 波动范围

func (*Bot) SetWriter added in v0.3.1

func (slf *Bot) SetWriter(writer io.Writer)

SetWriter 设置写入器

type BotOption added in v0.3.1

type BotOption func(bot *Bot)

func WithBotNetworkDelay added in v0.3.1

func WithBotNetworkDelay(delay, fluctuation time.Duration) BotOption

WithBotNetworkDelay 设置机器人网络延迟及波动范围

  • delay 延迟
  • fluctuation 波动范围

func WithBotWriter added in v0.3.1

func WithBotWriter(construction func(bot *Bot) io.Writer) BotOption

WithBotWriter 设置机器人写入器,默认为 os.Stdout

type Conn

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

Conn 服务器连接单次会话的包装

func (*Conn) Close

func (slf *Conn) Close(err ...error)

Close 关闭连接

func (*Conn) GetData

func (slf *Conn) GetData(key any) any

GetData 获取连接数据

func (*Conn) GetID

func (slf *Conn) GetID() string

GetID 获取连接ID

  • 为远程地址的字符串形式

func (*Conn) GetIP

func (slf *Conn) GetIP() string

GetIP 获取连接IP

func (*Conn) GetMessageData added in v0.1.0

func (slf *Conn) GetMessageData(key any) any

GetMessageData 获取消息数据

func (*Conn) GetOnlineTime added in v0.2.8

func (slf *Conn) GetOnlineTime() time.Duration

GetOnlineTime 获取连接在线时长

func (*Conn) GetOpenTime added in v0.2.8

func (slf *Conn) GetOpenTime() time.Time

GetOpenTime 获取连接打开时间

func (*Conn) GetServer added in v0.2.7

func (slf *Conn) GetServer() *Server

GetServer 获取服务器

func (*Conn) GetWST added in v0.1.0

func (slf *Conn) GetWST() int

GetWST 获取websocket消息类型

func (*Conn) GetWebsocketRequest added in v0.2.7

func (slf *Conn) GetWebsocketRequest() *http.Request

GetWebsocketRequest 获取websocket请求

func (*Conn) IsBot added in v0.3.1

func (slf *Conn) IsBot() bool

IsBot 是否是机器人连接

func (*Conn) IsClosed added in v0.1.5

func (slf *Conn) IsClosed() bool

IsClosed 是否已经关闭

func (*Conn) IsWebsocket

func (slf *Conn) IsWebsocket() bool

IsWebsocket 是否是websocket连接

func (*Conn) PushAsyncMessage added in v0.3.0

func (slf *Conn) PushAsyncMessage(caller func() error, callback func(err error), mark ...log.Field)

PushAsyncMessage 推送异步消息,该消息将通过 Server.PushShuntAsyncMessage 函数推送

  • mark 为可选的日志标记,当发生异常时,将会在日志中进行体现

func (*Conn) PushUniqueAsyncMessage added in v0.3.1

func (slf *Conn) PushUniqueAsyncMessage(name string, caller func() error, callback func(err error), mark ...log.Field)

PushUniqueAsyncMessage 推送唯一异步消息,该消息将通过 Server.PushUniqueShuntAsyncMessage 函数推送

  • mark 为可选的日志标记,当发生异常时,将会在日志中进行体现
  • 不同的是当上一个相同的 unique 消息未执行完成时,将会忽略该消息

func (*Conn) ReleaseData

func (slf *Conn) ReleaseData() *Conn

ReleaseData 释放数据

func (*Conn) RemoteAddr

func (slf *Conn) RemoteAddr() net.Addr

RemoteAddr 获取远程地址

func (*Conn) SetData

func (slf *Conn) SetData(key, value any) *Conn

SetData 设置连接数据,该数据将在连接关闭前始终存在

func (*Conn) SetMessageData added in v0.1.0

func (slf *Conn) SetMessageData(key, value any) *Conn

SetMessageData 设置消息数据,该数据将在消息处理完成后释放

func (*Conn) SetWST added in v0.1.0

func (slf *Conn) SetWST(wst int) *Conn

SetWST 设置websocket消息类型

func (*Conn) Ticker added in v0.3.0

func (slf *Conn) Ticker() *timer.Ticker

Ticker 获取定时器

func (*Conn) ViewData added in v0.2.5

func (slf *Conn) ViewData() map[any]any

ViewData 查看只读的连接数据

func (*Conn) Write

func (slf *Conn) Write(packet []byte, callback ...func(err error))

Write 向连接中写入数据

  • messageType: websocket模式中指定消息类型

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 ConnectionClosedEventHandle

type ConnectionClosedEventHandle func(srv *Server, conn *Conn, err any)

type ConnectionOpenedAfterEventHandle added in v0.0.21

type ConnectionOpenedAfterEventHandle func(srv *Server, conn *Conn)

type ConnectionOpenedEventHandle

type ConnectionOpenedEventHandle func(srv *Server, conn *Conn)

type ConnectionPacketPreprocessEventHandle added in v0.0.28

type ConnectionPacketPreprocessEventHandle func(srv *Server, conn *Conn, packet []byte, abort func(), usePacket func(newPacket []byte))

type ConnectionReceivePacketEventHandle

type ConnectionReceivePacketEventHandle func(srv *Server, conn *Conn, packet []byte)

type ConnectionWritePacketBeforeEventHandle added in v0.0.21

type ConnectionWritePacketBeforeEventHandle func(srv *Server, conn *Conn, packet []byte) []byte

type ConsoleCommandEventHandle

type ConsoleCommandEventHandle func(srv *Server, command string, params ConsoleParams)

type ConsoleParams added in v0.3.0

type ConsoleParams map[string][]string

ConsoleParams 控制台参数

func (ConsoleParams) Add added in v0.3.0

func (slf ConsoleParams) Add(key, value string)

Add 添加参数

func (ConsoleParams) Clear added in v0.3.0

func (slf ConsoleParams) Clear()

Clear 清空参数

func (ConsoleParams) Del added in v0.3.0

func (slf ConsoleParams) Del(key string)

Del 删除参数

func (ConsoleParams) Get added in v0.3.0

func (slf ConsoleParams) Get(key string) string

Get 获取参数值

func (ConsoleParams) GetValueNum added in v0.3.0

func (slf ConsoleParams) GetValueNum(key string) int

GetValueNum 获取参数值数量

func (ConsoleParams) GetValues added in v0.3.0

func (slf ConsoleParams) GetValues(key string) []string

GetValues 获取参数值

func (ConsoleParams) Has added in v0.3.0

func (slf ConsoleParams) Has(key string) bool

Has 是否存在参数

type ContextPacker added in v0.0.29

type ContextPacker[Context any] func(ctx *gin.Context) Context

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 创建

func (*Http[Context]) Gin added in v0.2.9

func (slf *Http[Context]) Gin() *gin.Engine

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

func NewGinWrapper[CTX any](server *gin.Engine, pack func(ctx *gin.Context) CTX) *HttpWrapper[CTX]

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) MessageType added in v0.1.3

func (slf *Message) MessageType() MessageType

MessageType 返回消息类型

func (*Message) String added in v0.0.11

func (slf *Message) String() string

String 返回消息的字符串表示

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 MessageErrorEventHandle func(srv *Server, message *Message, err error)

type MessageExecBeforeEventHandle added in v0.1.3

type MessageExecBeforeEventHandle func(srv *Server, message *Message) bool

type MessageLowExecEventHandle

type MessageLowExecEventHandle func(srv *Server, message *Message, cost time.Duration)

type MessageReadyEventHandle added in v0.1.4

type MessageReadyEventHandle func(srv *Server)

type MessageType

type MessageType byte

MessageType 消息类型

const (
	// MessageTypePacket 数据包消息类型:该类型的数据将被发送到 ConnectionReceivePacketEvent 进行处理
	MessageTypePacket MessageType = iota + 1

	// MessageTypeError 错误消息类型:根据不同的错误状态,将交由 Server 进行统一处理
	MessageTypeError

	// MessageTypeTicker 定时器消息类型
	MessageTypeTicker

	// MessageTypeShuntTicker 分流定时器消息类型
	MessageTypeShuntTicker

	// MessageTypeAsync 异步消息类型
	MessageTypeAsync

	// MessageTypeAsyncCallback 异步回调消息类型
	MessageTypeAsyncCallback

	// MessageTypeShuntAsync 分流异步消息类型
	MessageTypeShuntAsync

	// MessageTypeShuntAsyncCallback 分流异步回调消息类型
	MessageTypeShuntAsyncCallback

	// MessageTypeUniqueAsync 唯一异步消息类型
	MessageTypeUniqueAsync

	// MessageTypeUniqueAsyncCallback 唯一异步回调消息类型
	MessageTypeUniqueAsyncCallback

	// MessageTypeUniqueShuntAsync 唯一分流异步消息类型
	MessageTypeUniqueShuntAsync

	// MessageTypeUniqueShuntAsyncCallback 唯一分流异步回调消息类型
	MessageTypeUniqueShuntAsyncCallback

	// MessageTypeSystem 系统消息类型
	MessageTypeSystem
)

func (MessageType) String

func (slf MessageType) String() string

String 返回消息类型的字符串表示

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"
)

func GetNetworks added in v0.0.29

func GetNetworks() []Network

GetNetworks 获取所有支持的网络模式

type Option

type Option func(srv *Server)

func WithAsyncPoolSize added in v0.0.10

func WithAsyncPoolSize(size int) Option

WithAsyncPoolSize 通过指定异步消息池大小的方式创建服务器

  • 当通过 WithDisableAsyncMessage 禁用异步消息时,此选项无效
  • 默认值为 DefaultAsyncPoolSize

func WithDeadlockDetect added in v0.0.10

func WithDeadlockDetect(t time.Duration) Option

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 WithLimitLife added in v0.1.7

func WithLimitLife(t time.Duration) Option

WithLimitLife 通过限制最大生命周期的方式创建服务器

  • 通常用于测试服务器,服务器将在到达最大生命周期时自动关闭

func WithMessageBufferSize

func WithMessageBufferSize(size int) Option

WithMessageBufferSize 通过特定的消息缓冲池大小运行服务器

  • 默认大小为 DefaultMessageBufferSize
  • 消息数量超出这个值的时候,消息处理将会造成更大的开销(频繁创建新的结构体),同时服务器将输出警告内容

func WithPProf added in v0.0.12

func WithPProf(pattern ...string) Option

WithPProf 通过性能分析工具PProf创建服务器

func WithPacketWarnSize added in v0.3.3

func WithPacketWarnSize(size int) Option

WithPacketWarnSize 通过数据包大小警告的方式创建服务器,当数据包大小超过指定大小时,将会输出 WARN 类型的日志

  • 默认值为 DefaultPacketWarnSize
  • 当 size <= 0 时,表示不设置警告

func WithRunMode added in v0.0.13

func WithRunMode(mode RunMode) Option

WithRunMode 通过特定模式运行服务器

  • 默认为 RunModeDev

func WithShunt added in v0.0.24

func WithShunt(shuntMatcher func(conn *Conn) string) Option

WithShunt 通过连接数据包分流的方式创建服务器

  • 在分流的情况下,将会使用分流通道处理数据包,而不是使用系统通道,消息的执行将转移到对应的分流通道内进行串行处理,默认情况下所有消息都是串行处理的,适用于例如不同游戏房间并行处理,游戏房间内部消息串行处理的情况
  • shuntMatcher:用于匹配连接的函数,返回值为分流通道的 GUID 和是否允许创建新的分流通道,当返回不允许创建新的分流通道时,将会使用使用默认的系统通道

将被分流的消息类型(更多类型有待斟酌):

  • MessageTypePacket

注意事项:

  • 当分流匹配过程发生 panic 将会在系统通道内处理消息,并打印日志

func WithTLS

func WithTLS(certFile, keyFile string) Option

WithTLS 通过安全传输层协议TLS创建服务器

  • 支持:Http、Websocket

func WithTicker

func WithTicker(size, connSize int, autonomy bool) Option

WithTicker 通过定时器创建服务器,为服务器添加定时器功能

  • autonomy:定时器是否独立运行(独立运行的情况下不会作为服务器消息运行,会导致并发问题)

func WithWebsocketCompression added in v0.0.12

func WithWebsocketCompression(level int) Option

WithWebsocketCompression 通过数据压缩的方式创建Websocket服务器

  • 默认不开启数据压缩

func WithWebsocketMessageType

func WithWebsocketMessageType(messageTypes ...int) Option

WithWebsocketMessageType 设置仅支持特定类型的Websocket消息

func WithWebsocketReadDeadline added in v0.0.8

func WithWebsocketReadDeadline(t time.Duration) Option

WithWebsocketReadDeadline 设置 Websocket 读取超时时间

  • 默认: DefaultWebsocketReadDeadline
  • 当 t <= 0 时,表示不设置超时时间

func WithWebsocketWriteCompression added in v0.0.12

func WithWebsocketWriteCompression() Option

WithWebsocketWriteCompression 通过数据写入压缩的方式创建Websocket服务器

  • 默认不开启数据压缩

type RunMode added in v0.0.13

type RunMode = log.RunMode
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

func New(network Network, options ...Option) *Server

New 根据特定网络类型创建一个服务器

Example
package main

import (
	"github.com/kercylan98/minotaur/server"
	"time"
)

func main() {
	srv := server.New(server.NetworkWebsocket, server.WithLimitLife(time.Millisecond))
	srv.RegConnectionReceivePacketEvent(func(srv *server.Server, conn *server.Conn, packet []byte) {
		conn.Write(packet)
	})
	if err := srv.Run(":9999"); err != nil {
		panic(err)
	}

}
Output:

func (*Server) CloseConn added in v0.0.12

func (slf *Server) CloseConn(id string)

CloseConn 关闭连接

func (*Server) Context added in v0.1.3

func (slf *Server) Context() context.Context

Context 获取服务器上下文

func (*Server) GRPCServer

func (slf *Server) GRPCServer() *grpc.Server

GRPCServer 当网络类型为 NetworkGRPC 时将被允许获取 grpc 服务器,否则将会发生 panic

func (*Server) GetMessageCount added in v0.0.29

func (slf *Server) GetMessageCount() int64

GetMessageCount 获取当前服务器中消息的数量

func (*Server) GetOnline added in v0.0.12

func (slf *Server) GetOnline(id string) *Conn

GetOnline 获取在线连接

func (*Server) GetOnlineAll added in v0.0.12

func (slf *Server) GetOnlineAll() map[string]*Conn

GetOnlineAll 获取所有在线连接

func (*Server) GetOnlineBotCount added in v0.3.1

func (slf *Server) GetOnlineBotCount() int

GetOnlineBotCount 获取在线机器人数量

func (*Server) GetOnlineCount added in v0.0.12

func (slf *Server) GetOnlineCount() int

GetOnlineCount 获取在线人数

func (*Server) HttpRouter deprecated

func (slf *Server) HttpRouter() gin.IRouter

HttpRouter 当网络类型为 NetworkHttp 时将被允许获取路由器进行路由注册,否则将会发生 panic

  • 通过该函数注册的路由将无法在服务器关闭时正常等待请求结束

Deprecated: 从 Minotaur 0.0.29 开始,由于设计原因已弃用,该函数将直接返回 *gin.Server 对象,导致无法正常的对请求结束时进行处理

func (*Server) HttpServer added in v0.0.29

func (slf *Server) HttpServer() *Http[*HttpContext]

HttpServer 替代 HttpRouter 的函数,返回一个 *Http[*HttpContext] 对象

  • 通过该函数注册的路由将在服务器关闭时正常等待请求结束
  • 如果需要自行包装 Context 对象,可以使用 NewHttpHandleWrapper 方法

func (*Server) IsOnline added in v0.0.12

func (slf *Server) IsOnline(id string) bool

IsOnline 是否在线

func (*Server) IsSocket added in v0.3.1

func (slf *Server) IsSocket() bool

IsSocket 是否是 Socket 模式

func (Server) OnConnectionClosedEvent

func (slf Server) OnConnectionClosedEvent(conn *Conn, err any)

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 (slf Server) OnConnectionPacketPreprocessEvent(conn *Conn, packet []byte, usePacket func(newPacket []byte)) bool

func (Server) OnConnectionReceivePacketEvent

func (slf Server) OnConnectionReceivePacketEvent(conn *Conn, packet []byte)

func (Server) OnConnectionWritePacketBeforeEvent added in v0.0.21

func (slf Server) OnConnectionWritePacketBeforeEvent(conn *Conn, packet []byte) (newPacket []byte)

func (Server) OnConsoleCommandEvent

func (slf Server) OnConsoleCommandEvent(command string, paramsStr string)

func (Server) OnMessageErrorEvent

func (slf Server) OnMessageErrorEvent(message *Message, err error)

func (Server) OnMessageExecBeforeEvent added in v0.1.3

func (slf Server) OnMessageExecBeforeEvent(message *Message) bool

func (Server) OnMessageLowExecEvent

func (slf Server) OnMessageLowExecEvent(message *Message, cost time.Duration)

func (Server) OnMessageReadyEvent added in v0.1.4

func (slf Server) OnMessageReadyEvent()

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) PushAsyncCallbackMessage added in v0.3.0

func (slf *Server) PushAsyncCallbackMessage(err error, callback func(err error), mark ...log.Field)

PushAsyncCallbackMessage 向服务器中推送 MessageTypeAsyncCallback 消息

  • 异步消息回调将会通过一个接收 error 的函数进行处理,该函数将在系统分发器中执行
  • mark 为可选的日志标记,当发生异常时,将会在日志中进行体现

func (*Server) PushAsyncMessage added in v0.2.9

func (slf *Server) PushAsyncMessage(caller func() error, callback func(err error), mark ...log.Field)

PushAsyncMessage 向服务器中推送 MessageTypeAsync 消息

  • 异步消息将在服务器的异步消息队列中进行处理,处理完成 caller 的阻塞操作后,将会通过系统消息执行 callback 函数
  • callback 函数将在异步消息处理完成后进行调用,无论过程是否产生 err,都将被执行,允许为 nil
  • 需要注意的是,为了避免并发问题,caller 函数请仅处理阻塞操作,其他操作应该在 callback 函数中进行
  • mark 为可选的日志标记,当发生异常时,将会在日志中进行体现

func (*Server) PushErrorMessage added in v0.3.0

func (slf *Server) PushErrorMessage(err error, errAction MessageErrorAction, mark ...log.Field)

PushErrorMessage 向服务器中推送 MessageTypeError 消息

  • 通过该函数推送错误消息,当消息触发时将在系统分发器中处理消息
  • 参数 errAction 用于指定错误消息的处理方式,可选值为 MessageErrorActionNone 和 MessageErrorActionShutdown
  • 参数 errAction 为 MessageErrorActionShutdown 时,将会停止服务器的运行
  • mark 为可选的日志标记,当发生异常时,将会在日志中进行体现

func (*Server) PushPacketMessage added in v0.3.0

func (slf *Server) PushPacketMessage(conn *Conn, wst int, packet []byte, mark ...log.Field)

PushPacketMessage 向服务器中推送 MessageTypePacket 消息

  • 当存在 WithShunt 的选项时,将会根据选项中的 shuntMatcher 进行分发,否则将在系统分发器中处理消息

func (*Server) PushShuntAsyncCallbackMessage added in v0.3.0

func (slf *Server) PushShuntAsyncCallbackMessage(conn *Conn, err error, callback func(err error), mark ...log.Field)

PushShuntAsyncCallbackMessage 向特定分发器中推送 MessageTypeAsyncCallback 消息,消息执行与 MessageTypeAsyncCallback 一致

  • 需要注意的是,当未指定 WithShunt 时,将会通过 PushAsyncCallbackMessage 进行转发

func (*Server) PushShuntAsyncMessage added in v0.3.0

func (slf *Server) PushShuntAsyncMessage(conn *Conn, caller func() error, callback func(err error), mark ...log.Field)

PushShuntAsyncMessage 向特定分发器中推送 MessageTypeAsync 消息,消息执行与 MessageTypeAsync 一致

  • 需要注意的是,当未指定 WithShunt 时,将会通过 PushAsyncMessage 进行转发
  • mark 为可选的日志标记,当发生异常时,将会在日志中进行体现

func (*Server) PushShuntTickerMessage added in v0.3.0

func (slf *Server) PushShuntTickerMessage(conn *Conn, name string, caller func(), mark ...log.Field)

PushShuntTickerMessage 向特定分发器中推送 MessageTypeTicker 消息,消息执行与 MessageTypeTicker 一致

  • 需要注意的是,当未指定 WithShunt 时,将会通过 PushTickerMessage 进行转发
  • mark 为可选的日志标记,当发生异常时,将会在日志中进行体现

func (*Server) PushSystemMessage added in v0.3.0

func (slf *Server) PushSystemMessage(handler func(), mark ...log.Field)

PushSystemMessage 向服务器中推送 MessageTypeSystem 消息

  • 系统消息仅包含一个可执行函数,将在系统分发器中执行
  • mark 为可选的日志标记,当发生异常时,将会在日志中进行体现

func (*Server) PushTickerMessage added in v0.3.0

func (slf *Server) PushTickerMessage(name string, caller func(), mark ...log.Field)

PushTickerMessage 向服务器中推送 MessageTypeTicker 消息

  • 通过该函数推送定时消息,当消息触发时将在系统分发器中处理消息
  • 可通过 timer.Ticker 或第三方定时器将执行函数(caller)推送到该消息中进行处理,可有效的避免线程安全问题
  • 参数 name 仅用作标识该定时器名称

定时消息执行不会有特殊的处理,仅标记为定时任务,也就是允许将各类函数通过该消息发送处理,但是并不建议

  • mark 为可选的日志标记,当发生异常时,将会在日志中进行体现

func (*Server) PushUniqueAsyncCallbackMessage added in v0.3.1

func (slf *Server) PushUniqueAsyncCallbackMessage(unique string, err error, callback func(err error), mark ...log.Field)

PushUniqueAsyncCallbackMessage 向服务器中推送 MessageTypeAsyncCallback 消息,消息执行与 MessageTypeAsyncCallback 一致

func (*Server) PushUniqueAsyncMessage added in v0.3.1

func (slf *Server) PushUniqueAsyncMessage(unique string, caller func() error, callback func(err error), mark ...log.Field)

PushUniqueAsyncMessage 向服务器中推送 MessageTypeAsync 消息,消息执行与 MessageTypeAsync 一致

  • 不同的是当上一个相同的 unique 消息未执行完成时,将会忽略该消息

func (*Server) PushUniqueShuntAsyncCallbackMessage added in v0.3.1

func (slf *Server) PushUniqueShuntAsyncCallbackMessage(conn *Conn, unique string, err error, callback func(err error), mark ...log.Field)

PushUniqueShuntAsyncCallbackMessage 向特定分发器中推送 MessageTypeAsyncCallback 消息,消息执行与 MessageTypeAsyncCallback 一致

  • 需要注意的是,当未指定 WithShunt 时,将会通过 PushUniqueAsyncCallbackMessage 进行转发

func (*Server) PushUniqueShuntAsyncMessage added in v0.3.1

func (slf *Server) PushUniqueShuntAsyncMessage(conn *Conn, unique string, caller func() error, callback func(err error), mark ...log.Field)

PushUniqueShuntAsyncMessage 向特定分发器中推送 MessageTypeAsync 消息,消息执行与 MessageTypeAsync 一致

  • 需要注意的是,当未指定 WithShunt 时,将会通过 PushUniqueAsyncMessage 进行转发
  • 不同的是当上一个相同的 unique 消息未执行完成时,将会忽略该消息

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) 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

func (slf *Server) Run(addr string) error

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:"")
Example
package main

import (
	"github.com/kercylan98/minotaur/server"
	"time"
)

func main() {
	srv := server.New(server.NetworkWebsocket, server.WithLimitLife(time.Millisecond))
	srv.RegConnectionReceivePacketEvent(func(srv *server.Server, conn *server.Conn, packet []byte) {
		conn.Write(packet)
	})
	if err := srv.Run(":9999"); err != nil {
		panic(err)
	}

}
Output:

func (*Server) RunNone added in v0.0.29

func (slf *Server) RunNone() error

RunNone 是 Run("") 的简写,仅适用于运行 NetworkNone 服务器

func (*Server) Shutdown

func (slf *Server) Shutdown()

Shutdown 主动停止运行服务器

func (*Server) Ticker

func (slf *Server) Ticker() *timer.Ticker

Ticker 获取服务器定时器

func (*Server) TimeoutContext added in v0.1.3

func (slf *Server) TimeoutContext(timeout time.Duration) (context.Context, context.CancelFunc)

TimeoutContext 获取服务器超时上下文,context.WithTimeout 的简写

type ShuntChannelClosedEventHandle added in v0.0.24

type ShuntChannelClosedEventHandle func(srv *Server, guid int64)

type ShuntChannelCreatedEventHandle added in v0.0.24

type ShuntChannelCreatedEventHandle func(srv *Server, guid int64)

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)

Directories

Path Synopsis
Package gateway 是用于处理服务器消息的网关模块,适用于对客户端消息进行处理、转发的情况。
Package gateway 是用于处理服务器消息的网关模块,适用于对客户端消息进行处理、转发的情况。

Jump to

Keyboard shortcuts

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