Ainx的全局配置

📕作者简介:过去日记,致力于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
相关推荐
EasyCVR43 分钟前
萤石设备视频接入平台EasyCVR多品牌摄像机视频平台海康ehome平台(ISUP)接入EasyCVR不在线如何排查?
运维·服务器·网络·人工智能·ffmpeg·音视频
明月看潮生1 小时前
青少年编程与数学 02-003 Go语言网络编程 09课题、Cookie
青少年编程·golang·网络编程·编程与数学
明月看潮生2 小时前
青少年编程与数学 02-003 Go语言网络编程 15课题、Go语言URL编程
开发语言·网络·青少年编程·golang·编程与数学
明月看潮生2 小时前
青少年编程与数学 02-003 Go语言网络编程 14课题、Go语言Udp编程
青少年编程·golang·网络编程·编程与数学
龙哥说跨境2 小时前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫
hlsd#3 小时前
go 集成go-redis 缓存操作
redis·缓存·golang
pk_xz1234564 小时前
Shell 脚本中变量和字符串的入门介绍
linux·运维·服务器
小珑也要变强4 小时前
Linux之sed命令详解
linux·运维·服务器
海绵波波1074 小时前
Webserver(4.3)TCP通信实现
服务器·网络·tcp/ip
九河云6 小时前
AWS账号注册费用详解:新用户是否需要付费?
服务器·云计算·aws