From 2669cfd0502b2f76d73b89bae22d2b6c8f77d235 Mon Sep 17 00:00:00 2001 From: aceld Date: Thu, 31 Jan 2019 20:10:44 +0800 Subject: [PATCH] =?UTF-8?q?Zinx-V0.4=20=E5=A2=9E=E6=B7=BB=E5=85=A8?= =?UTF-8?q?=E5=B1=80=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/globalobj.go | 65 ++++++++++++++++++++++++++++++++++++++++++++++ znet/connection.go | 3 ++- znet/server.go | 18 ++++++++----- 3 files changed, 79 insertions(+), 7 deletions(-) create mode 100644 utils/globalobj.go diff --git a/utils/globalobj.go b/utils/globalobj.go new file mode 100644 index 0000000..45ad4c3 --- /dev/null +++ b/utils/globalobj.go @@ -0,0 +1,65 @@ +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版本号 + MaxPacketSize uint32 //都需数据包的最大值 + MaxConn int //当前服务器主机允许的最大链接个数 +} + +/* + 定义一个全局的对象 +*/ +var GlobalObject *GlobalObj + +//读取用户的配置文件 +func (g *GlobalObj) Reload() { + data, err := ioutil.ReadFile("conf/zinx.json") + if err != nil { + panic(err) + } + //将json数据解析到struct中 + //fmt.Printf("json :%s\n", data) + err = json.Unmarshal(data, &GlobalObject) + if err != nil { + panic(err) + } +} + +/* + 提供init方法,默认加载 +*/ +func init() { + //初始化GlobalObject变量,设置一些默认值 + GlobalObject = &GlobalObj{ + Name: "ZinxServerApp", + Version: "V0.4", + TcpPort: 7777, + Host: "0.0.0.0", + MaxConn: 12000, + MaxPacketSize:4096, + } + + //从配置文件中加载一些用户配置的参数 + GlobalObject.Reload() +} diff --git a/znet/connection.go b/znet/connection.go index db640dd..c40cf31 100644 --- a/znet/connection.go +++ b/znet/connection.go @@ -3,6 +3,7 @@ package znet import ( "fmt" "net" + "zinx/utils" "zinx/ziface" ) @@ -48,7 +49,7 @@ func (c *Connection) StartReader() { for { //读取我们最大的数据到buf中 - buf := make([]byte, 512) + buf := make([]byte, utils.GlobalObject.MaxPacketSize) _, err := c.Conn.Read(buf) if err != nil { fmt.Println("recv buf err ", err) diff --git a/znet/server.go b/znet/server.go index 4242bcd..71aec7c 100644 --- a/znet/server.go +++ b/znet/server.go @@ -4,6 +4,7 @@ import ( "fmt" "net" "time" + "zinx/utils" "zinx/ziface" ) @@ -24,22 +25,27 @@ type Server struct { /* 创建一个服务器句柄 */ -func NewServer (name string) ziface.IServer { +func NewServer () ziface.IServer { + utils.GlobalObject.Reload() + s:= &Server { - Name :name, + Name :utils.GlobalObject.Name, IPVersion:"tcp4", - IP:"0.0.0.0", - Port:7777, + IP:utils.GlobalObject.Host, + Port:utils.GlobalObject.TcpPort, Router: nil, } - return s } //============== 实现 ziface.IServer 里的全部接口方法 ======== //开启网络服务 func (s *Server) Start() { - fmt.Printf("[START] Server listenner at IP: %s, Port %d, is starting\n", s.IP, s.Port) + 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) //开启一个go去做服务端Linster业务 go func() {