goboot

module
v0.1.6-alpha1 Latest Latest
Warning

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

Go to latest
Published: May 10, 2023 License: MIT

README

GOBOOT

概述

GOBOOT 是一个可以用来开http,gRPC和自定义游戏服务器的Golang脚手架。

特性

  • 高性能分布式服务器开发
  • 支持gRPC开发微服务
  • 支持http的API开发
  • 支持游戏服务器网关开发,支持tcpkcpwebsocket协议
  • 提供了bootctl作为,项目管理和代码生成工具

快速开始

使用bootctl

goboot推荐使用bootctl命令行工具,来生成代码结构和代码,方便在多人开发时,控制编码规范。具体参考

一个规范的目录结构如下:

├─bin                             # build之后的发布包
├─cmd                             # 自定义的命令行工具
├─configs                         # 所有的配置文件
├─docs                            # 项目相关文档
|  ├─devel                        # 开发相关文档,如接口描述
│  └─guide                        # 教程相关文档
├─example                         # 一些小示例,或测试demo
├─internal                        # 业务代码
│  ├─api                          # 应用程序接口,http和game
│  │  ├─gameserver
│  │  │  └─gateway
│  │  └─helloworld
│  │      └─user
│  ├─pb                           # protbuf生成库
│  │  └─proto                     # .proto文件
│  └─service                      # 服务
│      └─user
│          ├─client
│          └─server
├─logs                            # 日志
│  └─Gateway
└─pkg                             # 公共包
http api

goboot开发http服务器,只需要传入调用httpapi包,传入配置文件地址,监听端口,以及实例ID:

instance := httpapi.New(*configPath, *addr, *instanceId)

...

// 启动
boot.BootServe(instance)

通过模块化的Module,来建立API,一个Module要遵循httpapi.Module的定义:

Module interface {
		// 初始化模块
		Init(app *App)
		// 模块的分组路由
		Group() Group
}

依赖nats做消息转发,Etcd做服务注册

gRPC Service

goboot开发gRPC服务器,同样只需要使用:

instance := server.New(*name, *configPath, *addr, *instanceId)

boot.BootServe(instance)

不同的是,这里的server需要定制protobuf文件实现。

Game Server

goboot开发游戏服务器,使用的gameapi包的实现:

instance := gameapi.New(*configPath, *addr, *instanceId)

boot.BootServe(instance)

同样使用的模块化的管理接口,不同的是,gameapi使用的opcode->protobufMessage的映射管理作为路由:

Moddule interface {

		// 初始化模块
		Init(app *App)

		// 模块的分组路由
		Group() map[uint16]Handler
}

依赖Etcd做服务注册

惯例

开发能够遵循一些管理来实现,这样可以大部分减少描述的篇幅,遵循惯例,也方便多人开发的协作。因此,推崇一下惯例:

  1. 所有实例的配置文件都放在根目录下的configs目录
  2. 所有实例的配置文件中,设定日志配置条件
# 日志配置
Logger:
  # 日志输出级别,debug->info->warn->error
  Level: "debug"
  # 日志文件的输出分类,文件名是 {target}_{instanceId}.log
  Target: "gameserver.api"
  # 日志输文件夹
  Outpath: "./logs"
  1. 所有api接口的实现,都需要参考Module实现模块化
  2. 所有service的实现,必须通过protobuff定义gRPC实现
  3. 其他惯例,可以参考示例中的参考实现

参考

打赏作者

打赏

Jump to

Keyboard shortcuts

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