📕作者简介:过去日记,致力于Java、GoLang,Rust等多种编程语言,热爱技术,喜欢游戏的博主。
📗本文收录于Ainx系列,大家有兴趣的可以看一看
📘相关专栏Rust初阶教程、go语言基础系列、spring教程等,大家有兴趣的可以看一看
📙Java并发编程系列,设计模式系列、go web开发框架系列正在发展中,喜欢Java,GoLang,Rust,的朋友们可以关注一下哦!
📙 本文大部分都是借鉴刘丹冰大佬的zinx框架和文章,更推荐大家去读大佬的原文,本文只是个人学习的记录
文章目录
Ainx的全局配置
随着架构逐步的变大,参数就会越来越多,为了省去我们后续大频率修改参数的麻烦,接下来Zinx需要做一个加载配置的模块,和一个全局获取Ainx参数的对象。
Ainx-V0.4增添全局配置代码实现
我们先做一个简单的加载配置模块,要加载的配置文件的文本格式,就选择比较通用的yaml格式,配置信息暂时如下:
config.yaml
yaml
Name: AinxServerApp
Version: V0.4
TcpPort: 8080
Host: 127.0.0.1
MaxConn: 12000
MaxPacketSize: 4096
现在我们需要建立一个全局配置信息的对象
创建全局参数文件
创建ainx/utils文件夹,在下面创建globalload.go文件,暂时编写如下。
ainx/utils/globalload.go
go
package utils
import (
"ainx/ainterface"
"fmt"
"github.com/spf13/viper"
)
/*
存储一切有关Zinx框架的全局参数,供其他模块使用
一些参数也可以通过 用户根据 zinx.json来配置
*/
type GlobalSet struct {
TcpServer ainterface.IServer //当前Zinx的全局Server对象
Host string //当前服务器主机IP
TcpPort string //当前服务器主机监听端口号
Name string //当前服务器名称
Version string //当前Zinx版本号
MaxPacketSize uint32 //都需数据包的最大值
MaxConn uint32 //当前服务器主机允许的最大链接个数
}
/*
定义一个全局的对象
*/
var GlobalSetting *GlobalSet
提供init初始化方法
然后我们提供一个init()方法,目的是初始化GlobalSetting 对象,和加载服务端应用配置文件在根目录下config.yaml,这里为了支持对yaml文件的解析,引入了第三方库viper,具体用法可以看中文文档https://golang.halfiisland.com/community/pkgs/Viper.html
zinx/utils/globalobj.go
go
// todo 未来支持多种配置文件格式
// 读取用户的配置文件
func (g *GlobalSet) Reload() {
vp := viper.New() //创建viper对象
vp.SetConfigName("config") //配置文件的名称
vp.AddConfigPath("./")
vp.SetConfigType("yaml") //配置文件的拓展名
err := vp.ReadInConfig() //读取配置文件的内容
if err != nil {
panic(err)
}
//将json数据解析到struct中
err = vp.Unmarshal(&GlobalSetting)
if err != nil {
fmt.Println(GlobalSetting.Host)
return
}
}
/*
提供init方法,默认加载
*/
func init() {
//初始化GlobalObject变量,设置一些默认值
GlobalSetting = &GlobalSet{
Name: "AinxServerApp",
Version: "V0.4",
TcpPort: "8080",
Host: "0.0.0.0",
MaxConn: 12000,
MaxPacketSize: 4096,
}
}
目录结构
shell
│ config.yaml
│
├─ainterface
│ iconnection.go
│ irequest.go
│ irouter.go
│ iserver.go
│
├─anet
│ connection.go
│ request.go
│ router.go
│ server.go
│ server_test.go
│
├─examples
│ └─v03
│ ├─client
│ │ Client.go
│ │
│ └─server
│ Server.go
│
└─utils
globalload.go