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

tgf框架

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

使用介绍

创建业务逻辑节点

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<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.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一致性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/

基础架构图

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
mqantmqant 是一款基于 Golang 语言的简洁,高效,高性能的分布式游戏服务器框架,研发的初衷是要实现一款能支持高并发,高性能,高实时性的游戏服务器框架,也希望 mqant 未来能够做即时通讯和物联网方面的应用。特性分模块机制基于 golang 协程,开发过程全程做到无 callback 回调,代码可读性更高RPC 支持本地和远程自动切换远程 RPC 默认使用 rabbitmq,未来可以添加更多种类的通信协议网关采用 MQTT 协议,无需再开发客户端底层库,直接套用已有的 MQTT 客户端代码库,可以支持IOS,Android,websocket,PC 等多平台通信现如今只有多进程的架构才能达到支撑较多在线用户,降低服务器压力,降低单点故障所带来的影响等要求,因此一个真正高可扩展的游戏运行架构必须是多进程的。然而在游戏的开发和运营也是按步骤阶段性进行的,尤其是现如今服务器硬件设备配置也越来越高的前提下,在游戏刚开始运营时单台服务器就足够支撑了,况且多进程部署所带来的运维成本也相对较高。mqant 的设计思想是在能用单台服务器时能让充分挖掘服务器的性能,而在需要多进程时再通过简单的配置就可以实现分布式部署。mqant 游戏服务器的运行架构mqant 服务器是按模块来划分功能模块的,例如 用户管理,在线聊天,战斗平台等等都应该划分为独立的模块模块之间通过 RPC 通讯,mqant 底层会根据实际情况选择 rpc 数据交互的通信渠道,在调用模块在同一个进程的情况下直接使用 golang chan 通讯,因此同进程内模块通信性能不受影响。 标签:mqant
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值