Zinx学习之全局配置模块

警告
本文最后更新于 2021-01-02,文中内容可能已过时。

https://pic.yqqy.top/blog/20210102233220.png
全局配置脑图

写一个全局配置是为了更方便的维护项目已经修改代码参数,创建 conf/zinx.json文件,配置信息如下:

1
2
3
4
5
6
7
{
  "Name": "demo server",
  "Host": "127.0.0.1",
  "IPVersion": "tcp4",
  "TcpPort": 8999,
  "MaxConn": 3
}

创建 utils/globalobj.go 文件,代码编写如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// GlobalObj 用来映射 zinx.json
type GlobalObj struct {
	TcpServer     ziface.IServer //全局Server对象
	IPVersion     string         // IP版本
	Host          string         //当前服务器主机IP
	TcpPort       int            //当前服务器主机监听端口号
	Name          string         //当前服务器名称
	Version       string         //当前服务版本号
	MaxPacketSize uint32         //都需数据包的最大值
	MaxConn       int            //当前服务器主机允许的最大链接个数
}

// 定义一个全局的对象
var GlobalObject *GlobalObj

//读取用户的配置文件
func (g *GlobalObj) Reload() {
	data, err := ioutil.ReadFile("conf/zinx.json")
	if err != nil {
		panic(err)
	}

	err = json.Unmarshal(data, &GlobalObject)
	if err != nil {
		panic(err)
	}
}

/*
   提供init方法,默认加载
*/
func init() {
	//初始化GlobalObject变量,设置一些默认值
	GlobalObject = &GlobalObj{
		Name:          "ZinxServerApp",
		Version:       "V4",
		TcpPort:       8999,
		Host:          "0.0.0.0",
		MaxConn:       1000,
		MaxPacketSize: 4096,
	}
	//从配置文件中加载一些用户配置的参数
	GlobalObject.Reload()
}

server.go中NewServer替换

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// NewServer 实例Server
func NewServer(name string) ziface.IServer {
	return &Server{
		Name:      utils.GlobalObject.Name,
		IPVersion: utils.GlobalObject.IPVersion,
		IP:        utils.GlobalObject.Host,
		Port:      utils.GlobalObject.TcpPort,
		Router:    nil,
	}
}

在server.go中Start()方法中开始加上日志信息:

1
2
3
4
5
fmt.Printf("[START] Server name: %s,listenner at IP: %s, Port %d is starting\n", s.Name, s.IP, s.Port)
	fmt.Printf("[Zinx] Version: %s, MaxConn: %d,  MaxPacketSize: %d\n",
		utils.GlobalObject.Version,
		utils.GlobalObject.MaxConn,
		utils.GlobalObject.MaxPacketSize)

拷贝v3中的代码到v4,在v4目录下创建 conf/zinx.json ,将上面的zinx.json内容复制进去,分别运行server.go和client.go即可看到服务日志开始打印。

https://pic.yqqy.top/blog/20210102232931.png
测试