minotaur

module
v0.0.4 Latest Latest
Warning

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

Go to latest
Published: Jul 1, 2023 License: MIT

README

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

Directories

Path Synopsis
ax module
Package component 定义了通用组件的接口
Package component 定义了通用组件的接口
components
Package components 通用组件的内置实现
Package components 通用组件的内置实现
Package config 基于配置导表功能实现的配置加载及刷新功能
Package config 基于配置导表功能实现的配置加载及刷新功能
Package examples 提供了多种实现案例
Package examples 提供了多种实现案例
multi-core-server-room-sync
该案例中将服务器消息通过多核的方式异步传输到房间中,在每个房间中单独同步处理维护消息。
该案例中将服务器消息通过多核的方式异步传输到房间中,在每个房间中单独同步处理维护消息。
simple-server-chatroom
该案例实现了一个简单的聊天室功能
该案例实现了一个简单的聊天室功能
simple-server-console
该案例中延时了控制台服务器的实现,支持运行中根据控制台指令执行额外的功能逻辑
该案例中延时了控制台服务器的实现,支持运行中根据控制台指令执行额外的功能逻辑
simple-server-cross
该案例中演示了两个跨服相互通过网络进行数据传输的实现
该案例中演示了两个跨服相互通过网络进行数据传输的实现
simple-server-echo
该案例中实现了一个简单的回响服务器
该案例中实现了一个简单的回响服务器
Package game 提供了通用游戏相关的接口和一组内置的实现。
Package game 提供了通用游戏相关的接口和一组内置的实现。
builtin
Package builtin 包含了通用游戏相关的接口的内置实现
Package builtin 包含了通用游戏相关的接口的内置实现
poker
Package poker 提供了一组用于处理扑克牌游戏的函数和数据结构。
Package poker 提供了一组用于处理扑克牌游戏的函数和数据结构。
Package notify 包含了对外部第三方通知的实现,如机器人消息等
Package notify 包含了对外部第三方通知的实现,如机器人消息等
notifies
Package notifies 包含了内置通知内容的实现
Package notifies 包含了内置通知内容的实现
senders
Package senders Package 包含了内置通知发送器的实现
Package senders Package 包含了内置通知发送器的实现
Package planner 包含了策划工具相关的内容
Package planner 包含了策划工具相关的内容
configexport
Package configexport 提供了XLSX配置转换为JSON及Go代码的导表工具实现
Package configexport 提供了XLSX配置转换为JSON及Go代码的导表工具实现
configexport/example
Code generated by minotaur-config-export.
Code generated by minotaur-config-export.
Package report 提供了对数据埋点及上报的实现
Package report 提供了对数据埋点及上报的实现
Package server 提供了包含多种网络类型的服务器实现
Package server 提供了包含多种网络类型的服务器实现
Package utils 旨在提供一组用于处理通用功能的函数和数据结构。
Package utils 旨在提供一组用于处理通用功能的函数和数据结构。
generic
Package generic 目的在于提供一组基于泛型的用于处理通用功能的函数和数据结构。
Package generic 目的在于提供一组基于泛型的用于处理通用功能的函数和数据结构。
geometry
Package geometry 旨在提供一组用于处理几何形状和计算几何属性的函数和数据结构。
Package geometry 旨在提供一组用于处理几何形状和计算几何属性的函数和数据结构。
geometry/astar
Package astar 提供用于实现 A* 算法的函数和数据结构。
Package astar 提供用于实现 A* 算法的函数和数据结构。
geometry/dp
Package dp (DistributionPattern) 提供用于在二维数组中根据不同的特征标记为数组成员建立分布链接的函数和数据结构。
Package dp (DistributionPattern) 提供用于在二维数组中根据不同的特征标记为数组成员建立分布链接的函数和数据结构。
geometry/matrix
Package matrix 提供了一个简单的二维数组的实现
Package matrix 提供了一个简单的二维数组的实现
geometry/navmesh
Package navmesh 提供了用于导航网格处理的函数和数据结构。
Package navmesh 提供了用于导航网格处理的函数和数据结构。
log
str

Jump to

Keyboard shortcuts

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