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

news/2025/3/31 10:37:08/

tgf框架

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

使用介绍

创建业务逻辑节点

package quick_startimport ("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<thkhxm@gmail.com>
//@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.NodeIdreturn
}//模块名称
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一致性hashhttps://github.com/edwingeng/doublejump
godotenv环境变量工具https://github.com/joho/godotenv
zap日志框架https://go.uber.org/zap
lumberjack日志切割工具https://gopkg.in/natefinch/lumberjack.v2
excelizeExcel工具https://github.com/qax-os/excelize
sonicjson高性能工具https://github.com/bytedance/sonic/

基础架构图


http://www.ppmy.cn/news/1268287.html

相关文章

计算机网络简答题

面向连接和非连接的服务特点 面向连接的服务&#xff1a;通信双方在进行通信之前&#xff0c;要事先建立一个完整的可以彼此沟通的通道&#xff0c;在通信过程中整个连接的情况可以被实时的监控和管理 面向非链接的服务&#xff1a;不需要预先建立一个联络两个通信节点的连接&a…

[强网拟态决赛 2023] Crypto

文章目录 Bad_rsaClasslcal Bad_rsa 题目描述&#xff1a; from Crypto.Util.number import *f open(flag.txt,rb) m bytes_to_long(f.readline().strip())p getPrime(512) q getPrime(512) e getPrime(8) n p*q phi (p-1)*(q-1) d inverse(e,phi) leak d & ((1…

部署Kubernetes(k8s)集群,可视化部署kuboard

所需机器 主机名地址角色配置k8s-master192.168.231.134主节点2核4G,centos7k8s-node1192.168.231.135工作节点2核4G,centos7k8s-node2192.168.231.136工作节点2核4G,centos7 主节点CPU核数必须是 ≥2核且内存要求必须≥2G&#xff0c;否则k8s无法启动 1. 集群环境部署【三台…

深入学习之anaconda、pytorch、cuda安装

文章目录 1. 安装CUDA与CUDNN2. Anaconda安装PyTorch3. notebook添加自己创建的环境4. Anaconda安装相关的库5. GPU测试 1. 安装CUDA与CUDNN csdn大佬安装步骤 【CUDA】cuda安装 &#xff08;windows版&#xff09; 查看此电脑的CUDA版本配置 自己电脑上GPU使用的详细参数 n…

Leetcode221 最大正方形

最大正方形 题解1 DP题解2 暴力(参考) 在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内&#xff0c;找到 只包含 ‘1’ 的最大正方形&#xff0c;并返回其面积。 提示&#xff1a; m matrix.length, n matrix[i].length1 < m, n < 300matrix[i][j] 为 ‘0’ 或 ‘1’ 题解…

springboot基础(80):redis geospatial的应用

文章目录 前言redis geospatial如何从地图上获取经纬度springboot 的相关方法调用准备redis服务器引用的依赖预设位置的keyGEOADD 添加位置GEORADIUS 获取指定经纬度附件的停车场&#xff08;deprecated&#xff09;GEORADIUS 获取指定成员附件的停车场&#xff08;deprecated&…

Dueling DQN 跑 Pendulum-v1

gym-0.26.1 Pendulum-v1 Dueling DQN 因为还是DQN,所以我们沿用double DQN,然后把 Qnet 换成 VAnet。 其他的不变&#xff0c;详情参考前一篇文章。 class VA(nn.Module):"""只有一层隐藏层的A网络和V网络"""def __init__(self, state_dim, hidd…

插入算法(C语言)

#include<cstdio> #include<iostream> #define N 9 using namespace std; int main() {int arr[N1] { 1,4,7,13,16,19,22,25,280 }; int in,i,j;//要插入的数字//打印要插入数字的数组所有元素printf("插入前的数组: ");for ( i 0; i <N; i){print…