前言
- 为了减少大频率修改参数的麻烦,接来下需要对zinx增加配置模块和全局获取zinx参数的对象
一、全局配置实现思路
二、项目目录结构说明
三、源码修改说明
1 - 新增全局配置对象
- zinx/utils/globalobj.go
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()
}
2 - 新增json配置文件
- conf/zinx.json
{
"Name":"zinx v0.4 demoServerApp",
"Host": "127.0.0.1",
"TcpPort":7777,
"MaxConn":3
}
3 - server.go替换初始化参数
- zinx/znet/server.go
/*
初始化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
}
四、完整源码
特别说明由于文件的增大,将项目打包到附件中,自行下载,仅供学习