Documentation ¶
Overview ¶
Package server 提供了包含多种网络类型的服务器实现
Index ¶
- Constants
- Variables
- 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, packet []byte, mark ...any)
- func PushTickerMessage(srv *Server, caller func(), mark ...any)
- func SetMessagePacketVisualizer(handle func(packet []byte) string)
- type Conn
- func (slf *Conn) Close()
- func (slf *Conn) GetData(key any) any
- func (slf *Conn) GetID() string
- func (slf *Conn) GetIP() string
- func (slf *Conn) IsWebsocket() bool
- func (slf *Conn) ReleaseData() *Conn
- func (slf *Conn) RemoteAddr() net.Addr
- func (slf *Conn) Reuse(conn *Conn)
- func (slf *Conn) SetData(key, value any) *Conn
- func (slf *Conn) Write(packet Packet)
- func (slf *Conn) WriteWithCallback(packet Packet, callback func(err error), messageType ...int)
- type ConnReadonly
- type ConnectionClosedEventHandle
- type ConnectionOpenedEventHandle
- type ConnectionReceivePacketEventHandle
- type ConsoleCommandEventHandle
- type Cross
- type Message
- type MessageErrorAction
- type MessageErrorEventHandle
- type MessageLowExecEventHandle
- 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 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 Packet
- type ReceiveCrossPacketEventHandle
- type RunMode
- type Server
- func (slf *Server) CloseConn(id string)
- func (slf *Server) GRPCServer() *grpc.Server
- func (slf *Server) GetID() 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.IRouter
- func (slf *Server) IsOnline(id string) bool
- func (slf Server) OnConnectionClosedEvent(conn *Conn, err any)
- func (slf Server) OnConnectionOpenedEvent(conn *Conn)
- func (slf Server) OnConnectionReceivePacketEvent(conn *Conn, packet Packet)
- func (slf Server) OnConsoleCommandEvent(command string)
- func (slf Server) OnMessageErrorEvent(message *Message, err error)
- func (slf Server) OnMessageLowExecEvent(message *Message, cost time.Duration)
- func (slf Server) OnReceiveCrossPacketEvent(serverId int64, packet []byte)
- func (slf Server) OnStartBeforeEvent()
- func (slf Server) OnStartFinishEvent()
- func (slf Server) OnStopEvent()
- func (slf Server) RegConnectionClosedEvent(handle ConnectionClosedEventHandle)
- func (slf Server) RegConnectionOpenedEvent(handle ConnectionOpenedEventHandle)
- func (slf Server) RegConnectionReceivePacketEvent(handle ConnectionReceivePacketEventHandle)
- func (slf Server) RegConsoleCommandEvent(command string, handle ConsoleCommandEventHandle)
- func (slf Server) RegMessageErrorEvent(handle MessageErrorEventHandle)
- func (slf Server) RegMessageLowExecEvent(handle MessageLowExecEventHandle)
- func (slf Server) RegReceiveCrossPacketEvent(handle ReceiveCrossPacketEventHandle)
- func (slf Server) RegStartBeforeEvent(handle StartBeforeEventHandle)
- func (slf Server) RegStartFinishEvent(handle StartFinishEventHandle)
- func (slf Server) RegStopEvent(handle StopEventHandle)
- func (slf *Server) Run(addr string) error
- func (slf *Server) Shutdown()
- func (slf *Server) Ticker() *timer.Ticker
- type StartBeforeEventHandle
- type StartFinishEventHandle
- type StopEventHandle
Examples ¶
Constants ¶
const ( DefaultMessageBufferSize = 1024 DefaultMessageChannelSize = 1024 * 64 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 PushAsyncMessage ¶ added in v0.0.10
PushAsyncMessage 向特定服务器中推送 MessageTypeAsync 消息
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 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 服务器连接
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 ConsoleCommandEventHandle ¶
type ConsoleCommandEventHandle func(srv *Server)
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 MessageErrorAction ¶
type MessageErrorAction byte
MessageErrorAction 错误消息类型操作
const ( MessageErrorActionNone MessageErrorAction = iota // 错误消息类型操作:将不会被进行任何特殊处理,仅进行日志输出 MessageErrorActionShutdown // 错误消息类型操作:当接收到该类型的操作时,服务器将执行 Server.shutdown 函数 )
func (MessageErrorAction) String ¶
func (slf MessageErrorAction) String() string
type MessageErrorEventHandle ¶
type MessageType ¶
type MessageType byte
MessageType 消息类型
const ( // MessageTypePacket 数据包消息类型:该类型的数据将被发送到 ConnectionReceivePacketEvent 进行处理 MessageTypePacket MessageType = iota // MessageTypeError 错误消息类型:根据不同的错误状态,将交由 Server 进行统一处理 MessageTypeError // MessageTypeCross 跨服消息类型:将被推送到跨服的 Cross 实现中进行处理 MessageTypeCross // MessageTypeTicker 定时器消息类型 MessageTypeTicker // MessageTypeAsync 异步消息类型 MessageTypeAsync )
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 ( 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 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 Packet ¶ added in v0.0.10
Packet 数据包
func NewPacketString ¶ added in v0.0.14
NewPacketString 创建一个字符串数据包
func NewWSPacket ¶ added in v0.0.14
NewWSPacket 创建一个 websocket 数据包
func NewWSPacketString ¶ added in v0.0.14
NewWSPacketString 创建一个 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 server.Packet) { 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) GetOnlineAll ¶ added in v0.0.12
GetOnlineAll 获取所有在线连接
func (*Server) GetOnlineCount ¶ added in v0.0.12
GetOnlineCount 获取在线人数
func (*Server) HttpRouter ¶
HttpRouter 当网络类型为 NetworkHttp 时将被允许获取路由器进行路由注册,否则将会发生 panic
func (Server) OnConnectionClosedEvent ¶
func (Server) OnConnectionOpenedEvent ¶
func (slf Server) OnConnectionOpenedEvent(conn *Conn)
func (Server) OnConnectionReceivePacketEvent ¶
func (Server) OnConsoleCommandEvent ¶
func (slf Server) OnConsoleCommandEvent(command string)
func (Server) OnMessageErrorEvent ¶
func (Server) OnMessageLowExecEvent ¶
func (Server) OnReceiveCrossPacketEvent ¶
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)
RegConnectionClosedEvent 在连接关闭后将立刻执行被注册的事件处理函数
func (Server) RegConnectionOpenedEvent ¶
func (slf Server) RegConnectionOpenedEvent(handle ConnectionOpenedEventHandle)
RegConnectionOpenedEvent 在连接打开后将立刻执行被注册的事件处理函数
func (Server) RegConnectionReceivePacketEvent ¶
func (slf Server) RegConnectionReceivePacketEvent(handle ConnectionReceivePacketEventHandle)
RegConnectionReceivePacketEvent 在接收到数据包时将立刻执行被注册的事件处理函数
func (Server) RegConsoleCommandEvent ¶
func (slf Server) RegConsoleCommandEvent(command string, handle ConsoleCommandEventHandle)
RegConsoleCommandEvent 控制台收到指令时将立即执行被注册的事件处理函数
- 默认将注册 "exit", "quit", "close", "shutdown", "EXIT", "QUIT", "CLOSE", "SHUTDOWN" 指令作为关闭服务器的指令
- 可通过注册默认指令进行默认行为的覆盖
func (Server) RegMessageErrorEvent ¶
func (slf Server) RegMessageErrorEvent(handle MessageErrorEventHandle)
RegMessageErrorEvent 在处理消息发生错误时将立即执行被注册的事件处理函数
func (Server) RegMessageLowExecEvent ¶
func (slf Server) RegMessageLowExecEvent(handle MessageLowExecEventHandle)
RegMessageLowExecEvent 在处理消息缓慢时将立即执行被注册的事件处理函数
func (Server) RegReceiveCrossPacketEvent ¶
func (slf Server) RegReceiveCrossPacketEvent(handle ReceiveCrossPacketEventHandle)
RegReceiveCrossPacketEvent 在接收到跨服数据包时将立即执行被注册的事件处理函数
func (Server) RegStartBeforeEvent ¶
func (slf Server) RegStartBeforeEvent(handle StartBeforeEventHandle)
RegStartBeforeEvent 在服务器初始化完成启动前立刻执行被注册的事件处理函数
func (Server) RegStartFinishEvent ¶
func (slf Server) RegStartFinishEvent(handle StartFinishEventHandle)
RegStartFinishEvent 在服务器启动完成时将立刻执行被注册的事件处理函数
func (Server) RegStopEvent ¶ added in v0.0.9
func (slf Server) RegStopEvent(handle StopEventHandle)
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")
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)