tgf - 一个开箱即用的golang游戏服务器框架

tgf框架

tgf框架是使用golang开发的一套游戏分布式框架.属于开箱即用的项目框架,目前适用于中小型团队,独立开发者,快速开发使用.框架提供了一整套开发工具,并且定义了模块开发规范.开发者只需要关注业务逻辑即可,无需关心用户并发和节点状态等复杂情况.

使用介绍

创建业务逻辑节点

go 复制代码
package quick_start

import (
	"context"
	"github.com/thkhxm/tgf"
	"github.com/thkhxm/tgf/log"
	"github.com/thkhxm/tgf/rpc"
	"github.com/thkhxm/tgf_example/common/pb"
)

//***************************************************
//@Link  https://github.com/thkhxm/tgf
//@Link  https://gitee.com/timgame/tgf
//@QQ群 7400585
//author tim.huang<[email protected]>
//@Description
//2023/11/21
//***************************************************

//服务启动函数,在这个例子中我们将网关和业务节点放在了同一个服务中启动.
func Startup() {
	c := rpc.NewRPCServer(). //创建一个rpc服务
					WithGatewayWS("8032", "/example",nil). //启动一个网关
					WithService(&HallService{}).       //启动一个service的服务
					WithWhiteService("SayHello"). //添加客户端请求接口到白名单,无需登录即可访问
					WithCache(tgf.CacheModuleClose).   //关闭redis等缓存服务
					Run()
	select {
	case <-c:
		log.InfoTag("service", "service is down ")

	}
}
//接口约束
var _ rpc.IService = &HallService{}

// HallService
// @Description: implements rpc.IService
type HallService struct {
	rpc.Module
}
//客户端请求接口
func (h *HallService) SayHello(ctx context.Context, args *rpc.Args[*pb.DefaultRequest], reply *rpc.Reply[*pb.DefaultRequest]) (err error) {
	log.InfoTag("hall", "%s say hello ", args.GetData().Val)
	reply.SetData(&pb.DefaultRequest{Val: "good luck"})
	return
}

//服务器rpc请求接口
func (h *HallService) GetMyNodeId(ctx context.Context, args *rpc.DefaultArgs, reply *rpc.DefaultReply) (err error) {
	log.InfoTag("rpc", "hello %s", args.C)
	reply.C = tgf.NodeId
	return
}

//模块名称
func (h *HallService) GetName() string {
	return "hall"
}
//模块版本
func (h *HallService) GetVersion() string {
	return "v1.0"
}
//启动函数,该函数会在服务启动之后立马执行
func (h *HallService) Startup() (bool, error) {
	return true, nil
}

可以看到我们创建一个服务十分简单,只需要实现IService接口即可.这时候服务就完全启动了.而开发人员只需要关注业务代码即可.

其他详细的教程,可以查看

项目文档

项目地址

规划

项目后续会更新系列教程文章和视频教程,并且开源项目案例.也会不断的更新和优化项目框架.欢迎大家加入qq群一起交流和探讨.

交流群

QQ群:7400585

技术选型

Golang开发版本: 1.21.1

技术 说明 仓库地址
rpcx 底层rpc的实现 https://github.com/smallnest/rpcx
redis 提供数据缓存 https://redis.io/
hashmap 线程安全的集合 https://github.com/cornelk/hashmap
ants 高性能go协程池 https://github.com/panjf2000/ants
redislock 分布式redis锁 https://github.com/bsm/redislock
snowflake 雪花算法 https://github.com/bwmarrin/snowflake
doublejump 一致性hash https://github.com/edwingeng/doublejump
godotenv 环境变量工具 https://github.com/joho/godotenv
zap 日志框架 https://go.uber.org/zap
lumberjack 日志切割工具 https://gopkg.in/natefinch/lumberjack.v2
excelize Excel工具 https://github.com/qax-os/excelize
sonic json高性能工具 https://github.com/bytedance/sonic/

基础架构图

相关推荐
lc寒曦34 分钟前
我为女儿开发了一个游戏网站
游戏·ai编程·cursor·儿童教育
不知名美食探索家1 小时前
【11】Redis快速安装与Golang实战指南
redis·golang·bootstrap
普通网友2 小时前
内置AI与浏览器的开源终端Wave Terminal安装与远程连接内网服务器教程
开发语言·后端·golang
行思理3 小时前
go语言应该如何学习
开发语言·学习·golang
returnShitBoy3 小时前
Go语言中的垃圾回收是如何工作的?
java·jvm·golang
白山云北诗3 小时前
大型手游 DDoS 攻击怎么防护?游戏盾 SDK 技术解剖实录
游戏·ddos·手游高防 sdk·抗 ddos 方案
普通网友4 小时前
如何在CentOS部署青龙面板并实现无公网IP远程访问本地面板
开发语言·后端·golang
小羊在奋斗5 小时前
【经典DP】三步问题 / 整数拆分 / 不同路径II / 过河卒 / 下降路径最小和 / 地下城游戏
游戏·代理模式
洛卡卡了6 小时前
Go + Gin 优化动态定时任务系统:互斥控制、异常捕获与任务热更新
后端·go
LuckyLay9 小时前
LeetCode算法题(Go语言实现)_38
算法·leetcode·golang