Go to file
kercylan98 676b542943 feat: 支持通过 server.SetMessagePacketVisualizer 函数设置服务器数据包消息可视化函数 2023-07-13 10:30:35 +08:00
.github recessive: 取消 release.yml 中指定的版本号 2023-06-26 11:39:59 +08:00
component refactor: 服务器支持异步消息类型、死锁阻塞、异步慢消息检测 2023-07-07 16:28:04 +08:00
config fix: 配置加载后无限刷新修复 2023-07-05 21:29:58 +08:00
game perf: 优化代码结构,去除无用代码,去除重复代码 2023-07-11 19:35:08 +08:00
notify 飞书机器人通知实现 2023-06-13 16:14:29 +08:00
planner fix: 修复配置导出 Go 代码注释错误问题 2023-07-10 11:53:30 +08:00
report 文档优化 2023-06-12 11:30:08 +08:00
server feat: 支持通过 server.SetMessagePacketVisualizer 函数设置服务器数据包消息可视化函数 2023-07-13 10:30:35 +08:00
tools 代码扫描问题处理 (#3) (#4) 2023-05-30 14:24:03 +08:00
utils feat: 支持通过 super.StackGO 进行跨协程同步运行堆栈抓取 2023-07-12 18:36:47 +08:00
.gitignore 有限状态机实现 2023-05-26 10:49:16 +08:00
CHANGELOG.md chore(master): release 0.0.12 2023-07-11 10:55:30 +08:00
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md 2023-05-30 14:29:59 +08:00
CONTRIBUTING.md Create CONTRIBUTING.md 2023-05-30 14:31:11 +08:00
LICENSE LICENSE 2023-05-29 20:35:03 +08:00
README.md test: 移除 examples 包 2023-07-07 16:27:07 +08:00
go.mod feat: 支持对 HTTP 服务器通过 server.WithPprof 开启 pprof 2023-07-08 18:09:07 +08:00
go.sum feat: 支持对 HTTP 服务器通过 server.WithPprof 开启 pprof 2023-07-08 18:09:07 +08:00
local-doc.bat 文档及许可 2023-05-29 20:15:13 +08:00
local-doc.sh 代码扫描问题处理 (#3) (#4) 2023-05-30 14:24:03 +08:00

README.md

Minotaur

Go doc

Minotaur 是一个基于Golang 1.20 编写的服务端开发支持库,其中采用了大量泛型设计,用于游戏服务器开发。

目录结构概况

mindmap
  root((Minotaur))
    /component 通用组件接口定义
      /components 通用组件内置实现
    /config 针对配置导表的配置加载
    /game 游戏通用功能接口定义
      /builtin 游戏通用功能内置实现
    /notify 通知功能接口定义
    /planner 策划相关工具目录
      /configexport 配置导表功能实现
    /report 数据埋点及上报功能
    /server 网络服务器支持
      /cross 内置跨服功能实现
      /router 内置路由器功能实现
    /tools 第三方工具
    /utils 常用辅助函数包

Server 架构预览

server-gdi.jpg

安装

注意:依赖于 Go 1.20 +

运行以下 Go 命令来安装软件包:minotaur

$ go get -u github.com/kercylan98/minotaur

用法

本地文档

可使用 godoc 搭建本地文档服务器

安装 godoc

git clone golang.org/x/tools
cd tools/cmd
go install ...

使用 godoc 启动本地文档服务器

godoc -http=:9998 -play

Windows

.\local-doc.bat

Linux or MacOS

chmod 777 ./local-doc.sh
./local-doc.sh

文档地址

http://localhost:9998/pkg/github.com/kercylan98/minotaur/

简单示例

创建一个基于Websocket的回响服务器。

package main

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

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

访问 WebSocket 在线测试 进行验证。

Websocket地址: ws://127.0.0.1:9999

事件

Miontaur 中,绝大多数场景都采用事件注册的方式进行回调,可通过XXX.RegXXXEvent的方式进行事件注册,例如:

package main

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

func main() {
	srv := server.New(server.NetworkWebsocket)
	srv.RegConsoleCommandEvent("command", nil)
	srv.RegStartBeforeEvent(nil)
	srv.RegStartFinishEvent(nil)
	srv.RegConnectionClosedEvent(nil)
	srv.RegConnectionOpenedEvent(nil)
	srv.RegConnectionReceivePacketEvent(nil)
	srv.RegConnectionReceiveWebsocketPacketEvent(nil)
	srv.RegReceiveCrossPacketEvent(nil)
	srv.RegMessageErrorEvent(nil)
	srv.RegMessageLowExecEvent(nil)
}

其他的一些支持事件的结构体(非所有):

  • game.Room 游戏房间实现
  • synchronization.Map 并发安全的Map实现
  • ...

可选项

大部分的 New 函数均可使用可选项进行创建,具体函数前缀通常为 With

package main

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

func main() {
	server.New(server.NetworkWebsocket, 
		server.WithTicker(50, false),
		server.WithProd(),
		server.WithMultiCore(3),
		// ...
	)
}

更多的网络模式

package main

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

func main() {
	server.New(server.NetworkTcp)
	server.New(server.NetworkTcp4)
	server.New(server.NetworkTcp6)
	server.New(server.NetworkUdp)
	server.New(server.NetworkUdp4)
	server.New(server.NetworkUdp6)
	server.New(server.NetworkWebsocket)
	server.New(server.NetworkKcp)
	server.New(server.NetworkUnix)
	server.New(server.NetworkHttp)
	server.New(server.NetworkGRPC)
}

JetBrains OS licenses

Minotaur had been being developed with GoLand IDE under the free JetBrains Open Source license(s) granted by JetBrains s.r.o., hence I would like to express my thanks here.