Zinx - V0.3 全局配置
- 为了减少大频率修改参数的麻烦,接来下需要对zinx增加配置模块和全局获取zinx参数的对象
全局配置实现思路
代码实现
- 创建全局参数文件
首先义一个GlobalObj对象用来存储一切有关Zinx框架的全局参数,供其他模块使用,一些参数是可以通过zinx.json由用户进行配置。
因为GlobalObj是供全局使用的,所以要定义一个全局的对外Globalobj,能够让其他模块通过Globalobj对象访问数据。
然后我们提供一个init()方法,目的是初始化GlobalObj对象,和加载服务端应用配置文件conf/zinx.json
package utils
import (
"encoding/json"
"io/ioutil"
"zinx/ziface"
)
//存储一切有关Zinx框架的全局参数, 供其他模块使用
//一些参数是可以通过zinx.json由用户进行配置
type GlobalObj struct {
//Server
TcpServer ziface.IServer //当前Zinx全局的Server对象
Host string //当前服务器主机监听的IP
TcpPort int //当前服务器主机监听的端口号
Name string //当前服务器的名称
//Zinx
Version string //当前Zinx的版本号
MaxConn int //当前服务器主机允许的最大链接数
MaxPackageSize uint32 //当前Zinx框架数据包的最大值
}
//定义一个全局的对外Globalobj
var GlobalObject *GlobalObj
//从 zinx.json去加载用于自定义的参数
func (g *GlobalObj) Reload() {
data, err := ioutil.ReadFile("conf/zinx.json")
if err != nil {
panic(err)
}
//将json文件数据解析到struct中
err = json.Unmarshal(data, &GlobalObject)
if err != nil {
panic(err)
}
}
//提供一个init方法,初始化当前的GlobalObject
func init() {
//如果配置文件没有加载,默认的值
GlobalObject = &GlobalObj{
Name: "ZinxServerApp",
Version: "V0.4",
TcpPort: 8999,
Host: "0.0.0.0",
MaxConn: 1000,
MaxPackageSize: 4096,
}
//应该尝试从conf/zinx.json去加载一些用户自定义的参数
GlobalObject.Reload()
}
- json配置文件
{
"Name":"zinx v0.4 demoServerApp",
"Host": "127.0.0.1",
"TcpPort":7777,
"MaxConn":3
}
- 硬参数替换与Server初始化参数配置
//初始化Server模块的方法
func NewServer(name string) ziface.IServer {
s := &Server{
Name: utils.GlobalObject.Name,
IPVersion: "tcp4",
IP: utils.GlobalObject.Host,
Port: utils.GlobalObject.TcpPort,
Router: nil,
}
return s
}