core

package module
v1.0.5 Latest Latest
Warning

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

Go to latest
Published: Jun 24, 2026 License: Apache-2.0 Imports: 12 Imported by: 1

README

core

基于 Actor 模型的 Go 游戏服务器框架。通过 Object 树形管理 goroutine,以命令队列替代直接 channel 通信,避免死锁和 channel 滥用。

快速开始

package main

import (
    "github.com/acoderup/core"
    "github.com/acoderup/core/module"
    "github.com/acoderup/core/schedule"
)

func main() {
    core.WritePid()
    core.LoadPackages("config.json")  // 加载配置 → Init 所有内置 Package
    waitor := module.Start()          // PreloadModule → Module Init → Run
    schedule.StartTask()              // cron 调度器
    waitor.Wait("main")               // 阻塞直到关闭
}

详细示例见 example/ 目录。

架构

main
 ├─ core.LoadPackages("config.json")  ← viperx 读取 JSON → 反序列化到各 Package → Init
 ├─ module.Start()                    ← PreloadModule(如 stdin 命令行) → Module Init → Run
 │    └─ ModuleMgr (Actor, 每 10ms tick)
 │         ├─ 按优先级遍历所有 Module.Update()
 │         └─ 统一帧时间 GetCurrTime()
 └─ waitor.Wait()                     ← 阻塞直到 Object 树全部退出

信号触发 → module.Stop() → Module.Shutdown() → Object 树销毁 → 退出

Object 树

                        root (AppCtx)
                           │
            ┌──────────────┼──────────────┐
            │              │              │
          core           timer        executor
      (ModuleMgr)    (TimerMgr)    ┌───┴───┐
                                 worker_1 ... worker_8

模块

基础
模块 功能
basic Actor 基类。每个 Object 独占 goroutine + 串行命令队列,树形父子关系,严格分阶段关闭协议(seqnum + termAck)
container 线程安全容器:SynchronizedMap/List、跳表、对象池(Recycler)、平衡队列、channel/mutex 队列
utils 工具集:Waitor 栅栏同步、panic 恢复去重、反射深度克隆、ID 生成器、格式化
viperx 配置加载:多路径搜索配置文件,可选加密解密,内嵌默认 JSON
调度与执行
模块 功能
module 顶层调度器。Module 生命周期管理(Init→Update→Shutdown),优先级排序 tick,panic 隔离,统一帧时间
task 异步任务执行器。一致性哈希路由到 Worker,支持互斥任务(防重复)、共享任务(防缓存击穿)、广播、固定 Worker
timer 基于最小堆的异步定时器。回调在 Actor goroutine 中执行保证线程安全,支持重复/单次/无限
schedule Cron 表达式调度器。6 字段(秒分时日月周),支持 @daily/@hourly 等快捷写法
基础设施
模块 功能
signal OS 信号管理。SIGINT(Ctrl+C) 和 SIGTERM(kill) 触发优雅关闭
cmdline 进程内命令行控制台。stdin 读取命令,投递到 ModuleMgr 执行。内置 exit/help 命令
logger 日志系统。基于 logrus + lumberjack,JSON 格式文件输出,100MB 轮转,支持控制台 debug 模式
profile 性能统计。耗时监控 + 慢调用告警(SlowMS 阈值),TimeWatcher 对象池
分布式
模块 功能
transact 分布式事务协调器。2PC 协议,父子事务树,支持 SelfDecide/TwoPhase 策略,Yield/Resume 异步,可插拔通信骨架

配置

{
  "core":    { "MaxProcs": 4, "GCPercent": 0 },
  "module":  { "Options": { "QueueBacklog": 1024, "MaxDone": 1024, "Interval": 100 } },
  "executor": { "Worker": { "WorkerCnt": 8 }, "Options": { ... } },
  "timer":   { "Options": { "QueueBacklog": 1024, "MaxDone": 1024, "Interval": 100 } },
  "cmdline": { "SupportCmdLine": true },
  "signal":  { "SupportSignal": true },
  "profile": { "SlowMS": 500 },
  "tx": {}
}
  • GCPercent <= 0:关闭自动 GC,通过 core.TriggerGC() / core.FreeOSMemory() 手动维护
  • Interval:tick 间隔(毫秒),ModuleMgr 和 TimerMgr 各自独立
  • QueueBacklog:Actor 命令队列容量上限,超限 SendCommand 返回 false
  • WorkerCnt:Task 执行器 Worker 数量,默认 8

自定义模块

type MyModule struct{}
func (m *MyModule) ModuleName() string { return "my-module" }
func (m *MyModule) Init()              {}
func (m *MyModule) Update()            {}
func (m *MyModule) Shutdown()          { module.UnregisteModule(m) }

func init() {
    module.RegisteModule(&MyModule{}, 100*time.Millisecond, 10)
}

自定义 Package

type MyConfig struct { Addr string }
func (c *MyConfig) Name() string  { return "my-package" }
func (c *MyConfig) Init() error   { return nil }
func (c *MyConfig) Close() error  { return nil }

func init() {
    core.RegistePackage(&MyConfig{Addr: "localhost:8080"})
}

对应的 config.json

{ "my-package": { "Addr": "10.0.0.1:8080" } }

GC 策略

默认关闭自动 GC,由程序手动维护。可在 cron 中定时触发:

schedule.AddTask("gc", schedule.NewTask("gc", "0 0 4 * * *", func() error {
    core.FreeOSMemory()
    return nil
}))

如需恢复自动 GC,设置 config.jsoncore.GCPercent 为 100。

Documentation

Index

Constants

View Source
const (
	HOOK_BEFORE_START int = iota
	HOOK_AFTER_STOP
	HOOK_MAX
)
View Source
const (
	ObjId_RootId int = iota
	ObjId_CoreId
	ObjId_ExecutorId
	ObjId_TimerId
	ObjId_ProfileId
)

Variables

View Source
var (
	AppCtx = newCtx()
)
View Source
var Config = Configuration{}

Functions

func ClosePackages

func ClosePackages()

ClosePackages 关闭功能包

func CoreObject

func CoreObject() *basic.Object

func ExecuteHook

func ExecuteHook(hookpos int) error

func FreeOSMemory added in v1.0.5

func FreeOSMemory()

FreeOSMemory 触发 GC 并将内存归还给操作系统

func IsPackageLoaded

func IsPackageLoaded(name string) bool

IsPackageLoaded 判断功能包是否已经加载

func IsPackageRegistered

func IsPackageRegistered(name string) bool

IsPackageRegistered 判断功能包是否已经注册

func LaunchChild

func LaunchChild(o *basic.Object)

func LoadPackages

func LoadPackages(configFile string)

LoadPackages 从配置文件加载功能包

func LoadPackagesAuto

func LoadPackagesAuto()

LoadPackagesAuto 使用内嵌默认配置加载功能包

func RegisteHook

func RegisteHook(hookpos int, f hookfunc)

func RegistePackage

func RegistePackage(p Package)

RegistePackage 注册功能包

func RegisterConfigEncryptor

func RegisterConfigEncryptor(h viperx.ConfigFileEncryptorHook)

RegisterConfigEncryptor 注册配置文件加密器

func Terminate

func Terminate(o *basic.Object)

func TriggerGC added in v1.0.5

func TriggerGC()

TriggerGC 手动触发 GC,用于关闭自动 GC 后的程序维护

func WritePid

func WritePid()

Types

type Configuration

type Configuration struct {
	MaxProcs  int
	GCPercent int // GC 触发百分比,<=0 表示关闭自动GC,由程序手动维护
}

func (*Configuration) Close

func (c *Configuration) Close() error

func (*Configuration) Init

func (c *Configuration) Init() error

func (*Configuration) Name

func (c *Configuration) Name() string

type Ctx

type Ctx struct {
	*basic.Object
	CoreObj *basic.Object
}

type Package

type Package interface {
	Name() string
	Init() error
	io.Closer
}

Package 功能包 只做初始化,不要依赖其它功能包

Directories

Path Synopsis
queue
queue
queue
skiplist
Package skiplist implements skip list based maps and sets.
Package skiplist implements skip list based maps and sets.
biz
config
config
AtomicIdGen
AtomicIdGen

Jump to

Keyboard shortcuts

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