diff --git a/.gitignore b/.gitignore
index 34f929c..7a22760 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,6 @@
.idea
+.vscode
+
/zinx_app_demo/mmo_game/game_client/client_Data/
-/zinx_app_demt/mmo_game/mmo_game_log/
\ No newline at end of file
+/zinx_app_demt/mmo_game/mmo_game_log/
+*.log
diff --git a/Makefile b/Makefile
index 62ffc52..8273586 100644
--- a/Makefile
+++ b/Makefile
@@ -21,8 +21,8 @@ LD_FLAGS='-X "$(SERVICE)/version.TAG=$(TAG)" -X "$(SERVICE)/version.VERSION=$(VE
default: build
build:
- go build -ldflags $(LD_FLAGS) -gcflags "-N" -i -o $(SERVER_DEMO_BIN) $(SERVER_DEMO_PATH)/main.go
- go build -ldflags $(LD_FLAGS) -gcflags "-N" -i -o $(CLIENT_DEMO_BIN) $(CLIENT_DEMO_PATH)/main.go
+ go build -ldflags $(LD_FLAGS) -gcflags "-N" -o $(SERVER_DEMO_BIN) $(SERVER_DEMO_PATH)/main.go
+ go build -ldflags $(LD_FLAGS) -gcflags "-N" -o $(CLIENT_DEMO_BIN) $(CLIENT_DEMO_PATH)/main.go
clean:
rm $(SERVER_DEMO_BIN)
rm $(CLIENT_DEMO_BIN)
diff --git a/README.md b/README.md
index 8097ecf..1c35088 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,8 @@
Zinx 是一个基于Golang的轻量级并发服务器框架
-> **说明**:目前zinx已经在很多企业进行开发使用,具体使用领域包括:后端模块的消息中转、长链接游戏服务器、Web框架中的消息处理插件等。zinx的定位是代码简洁,让更多的开发者迅速的了解框架的内脏细节并且可以快速基于zinx DIY一款适合自己企业场景的模块。
+> **说明**:目前zinx已经在很多企业进行开发使用,具体使用领域包括:后端模块的消息中转、长链接游戏服务器、Web框架中的消息处理插件等。zinx的定位是代码简洁,让更多的开发者迅速的了解框架的内脏细节并且可以快速基于zinx DIY(二次开发)一款适合自己企业场景的模块。
+
#### 开发者
- 刘丹冰([@aceld](https://github.com/aceld))
@@ -397,6 +398,40 @@ func (c *Connection) GetProperty(key string) (interface{}, error)
func (c *Connection) RemoveProperty(key string)
```
+---
+
+#### 开发者
+- 刘丹冰([@aceld](https://github.com/aceld))
+- 张超([@zhngcho](https://github.com/zhngcho))
+- 高智辉Roger([@adsian](https://github.com/adsian))
+- 胡贵建([@huguijian](https://github.com/huguijian))
+
+
+---
+[zinx(C++版本)](https://github.com/marklion/zinx)
+#### 开发者
+- 刘洋([@marklion](https://github.com/marklion))
+
+
+---
+[zinx(Lua版本)](https://github.com/huqitt/zinx-lua)
+#### 开发者
+- 胡琪([@huqitt](https://github.com/huqitt))
+
+---
+[zinx(websocket版本)](https://github.com/aceld/zinx/tree/wsserver)
+#### 开发者
+- 胡贵建([@huguijian](https://github.com/huguijian))
+
+---
+
+感谢所有为zinx贡献的开发者
+
+
+
+
+
+
---
### 关于作者:
@@ -424,4 +459,4 @@ func (c *Connection) RemoveProperty(key string)
### **微信群**
-欢迎大家加入,获取更多相关学习资料
+欢迎大家加入,一起学习分享
diff --git a/examples/zinx_client/Makefile b/examples/zinx_client/Makefile
new file mode 100644
index 0000000..e6e9630
--- /dev/null
+++ b/examples/zinx_client/Makefile
@@ -0,0 +1,21 @@
+PROJECT_NAME:=zinx_client
+VERSION:=v1
+
+
+.PHONY: image run build clean
+
+build:
+ bash build.sh ${PROJECT_NAME}
+
+image:
+ docker build -t ${PROJECT_NAME}:${VERSION} .
+
+run:
+ docker run -itd \
+ -p 8999:8999 \
+ ${PROJECT_NAME}:${VERSION}
+
+
+clean:
+ rm -rf ${PROJECT_NAME}
+
diff --git a/examples/zinx_client/build.sh b/examples/zinx_client/build.sh
new file mode 100644
index 0000000..cfb700a
--- /dev/null
+++ b/examples/zinx_client/build.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+set -e
+
+APP_NAME=$1
+APP_VERSION=v$(cat version)
+BUILD_VERSION=$(git log -1 --oneline)
+BUILD_TIME=$(date "+%FT%T%z")
+GIT_REVISION=$(git rev-parse --short HEAD)
+GIT_BRANCH=$(git name-rev --name-only HEAD)
+GO_VERSION=$(go version)
+
+
+go build -ldflags " \
+ -X 'main.AppName=${APP_NAME}' \
+ -X 'main.AppVersion=${APP_VERSION}' \
+ -X 'main.BuildVersion=${BUILD_VERSION//\'/_}' \
+ -X 'main.BuildTime=${BUILD_TIME}' \
+ -X 'main.GitRevision=${GIT_REVISION}' \
+ -X 'main.GitBranch=${GIT_BRANCH}' \
+ -X 'main.GoVersion=${GO_VERSION}' \
+ " -o $APP_NAME
diff --git a/examples/zinx_client/version b/examples/zinx_client/version
new file mode 100644
index 0000000..276027b
--- /dev/null
+++ b/examples/zinx_client/version
@@ -0,0 +1 @@
+v 1.0.0
diff --git a/examples/zinx_server/build.sh b/examples/zinx_server/build.sh
index a294827..cfb700a 100644
--- a/examples/zinx_server/build.sh
+++ b/examples/zinx_server/build.sh
@@ -10,6 +10,7 @@ GIT_REVISION=$(git rev-parse --short HEAD)
GIT_BRANCH=$(git name-rev --name-only HEAD)
GO_VERSION=$(go version)
+
go build -ldflags " \
-X 'main.AppName=${APP_NAME}' \
-X 'main.AppVersion=${APP_VERSION}' \
@@ -18,4 +19,4 @@ go build -ldflags " \
-X 'main.GitRevision=${GIT_REVISION}' \
-X 'main.GitBranch=${GIT_BRANCH}' \
-X 'main.GoVersion=${GO_VERSION}' \
- " -o $2 .
+ " -o $APP_NAME
diff --git a/go.mod b/go.mod
index 0afff76..d27693c 100644
--- a/go.mod
+++ b/go.mod
@@ -2,4 +2,7 @@ module github.com/aceld/zinx
go 1.13
-require github.com/golang/protobuf v1.3.3
+require (
+ github.com/golang/protobuf v1.3.3
+ golang.org/x/net v0.0.0-20210415231046-e915ea6b2b7d // indirect
+)
diff --git a/go.sum b/go.sum
index b1efb8b..ed6c5e9 100644
--- a/go.sum
+++ b/go.sum
@@ -1,2 +1,8 @@
github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+golang.org/x/net v0.0.0-20210415231046-e915ea6b2b7d/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
diff --git a/utils/globalobj.go b/utils/globalobj.go
index 9ec697d..6110263 100644
--- a/utils/globalobj.go
+++ b/utils/globalobj.go
@@ -1,3 +1,12 @@
+// Package utils 提供zinx相关工具类函数
+// 包括:
+// 全局配置
+// 配置文件加载
+//
+// 当前文件描述:
+// @Title globalobj.go
+// @Description 相关配置文件定义及加载方式
+// @Author Aceld - Thu Mar 11 10:32:29 CST 2019
package utils
import (
@@ -114,6 +123,6 @@ func init() {
LogDebugClose: false,
}
- //从配置文件中加载一些用户配置的参数
+ //NOTE: 从配置文件中加载一些用户配置的参数
GlobalObject.Reload()
}
diff --git a/ziface/iconnection.go b/ziface/iconnection.go
index 22b268b..66a6807 100644
--- a/ziface/iconnection.go
+++ b/ziface/iconnection.go
@@ -1,3 +1,16 @@
+// Package ziface 主要提供zinx全部抽象层接口定义.
+// 包括:
+// IServer 服务mod接口
+// IRouter 路由mod接口
+// IConnection 连接mod层接口
+// IMessage 消息mod接口
+// IDataPack 消息拆解接口
+// IMsgHandler 消息处理及协程池接口
+//
+// 当前文件描述:
+// @Title iconnection.go
+// @Description 全部连接相关方法声明
+// @Author Aceld - Thu Mar 11 10:32:29 CST 2019
package ziface
import (
@@ -7,28 +20,18 @@ import (
//定义连接接口
type IConnection interface {
- //启动连接,让当前连接开始工作
- Start()
- //停止连接,结束当前连接状态M
- Stop()
- //返回ctx,用于用户自定义的go程获取连接退出状态
- Context() context.Context
- //从当前连接获取原始的socket TCPConn
- GetTCPConnection() *net.TCPConn
- //获取当前连接ID
- GetConnID() uint32
- //获取远程客户端地址信息
- RemoteAddr() net.Addr
+ Start() //启动连接,让当前连接开始工作
+ Stop() //停止连接,结束当前连接状态M
+ Context() context.Context //返回ctx,用于用户自定义的go程获取连接退出状态
- //直接将Message数据发送数据给远程的TCP客户端(无缓冲)
- SendMsg(msgID uint32, data []byte) error
- //直接将Message数据发送给远程的TCP客户端(有缓冲)
- SendBuffMsg(msgID uint32, data []byte) error
+ GetTCPConnection() *net.TCPConn //从当前连接获取原始的socket TCPConn
+ GetConnID() uint32 //获取当前连接ID
+ RemoteAddr() net.Addr //获取远程客户端地址信息
- //设置链接属性
- SetProperty(key string, value interface{})
- //获取链接属性
- GetProperty(key string) (interface{}, error)
- //移除链接属性
- RemoveProperty(key string)
+ SendMsg(msgID uint32, data []byte) error //直接将Message数据发送数据给远程的TCP客户端(无缓冲)
+ SendBuffMsg(msgID uint32, data []byte) error //直接将Message数据发送给远程的TCP客户端(有缓冲)
+
+ SetProperty(key string, value interface{}) //设置链接属性
+ GetProperty(key string) (interface{}, error) //获取链接属性
+ RemoveProperty(key string) //移除链接属性
}
diff --git a/ziface/iconnmanager.go b/ziface/iconnmanager.go
index 23bef5a..577d9fd 100644
--- a/ziface/iconnmanager.go
+++ b/ziface/iconnmanager.go
@@ -1,3 +1,16 @@
+// Package ziface 主要提供zinx全部抽象层接口定义.
+// 包括:
+// IServer 服务mod接口
+// IRouter 路由mod接口
+// IConnection 连接mod层接口
+// IMessage 消息mod接口
+// IDataPack 消息拆解接口
+// IMsgHandler 消息处理及协程池接口
+//
+// 当前文件描述:
+// @Title iconnmanager.go
+// @Description 连接管理相关,包括添加、删除、通过一个连接ID获得连接对象,当前连接数量、清空全部连接等方法
+// @Author Aceld - Thu Mar 11 10:32:29 CST 2019
package ziface
/*
diff --git a/ziface/idatapack.go b/ziface/idatapack.go
index 7b078af..e9841f6 100644
--- a/ziface/idatapack.go
+++ b/ziface/idatapack.go
@@ -1,3 +1,16 @@
+// Package ziface 主要提供zinx全部抽象层接口定义.
+// 包括:
+// IServer 服务mod接口
+// IRouter 路由mod接口
+// IConnection 连接mod层接口
+// IMessage 消息mod接口
+// IDataPack 消息拆解接口
+// IMsgHandler 消息处理及协程池接口
+//
+// 当前文件描述:
+// @Title idatapack.go
+// @Description 消息的打包和解包方法
+// @Author Aceld - Thu Mar 11 10:32:29 CST 2019
package ziface
/*
diff --git a/ziface/imessage.go b/ziface/imessage.go
index cada145..88e786e 100644
--- a/ziface/imessage.go
+++ b/ziface/imessage.go
@@ -1,3 +1,16 @@
+// Package ziface 主要提供zinx全部抽象层接口定义.
+// 包括:
+// IServer 服务mod接口
+// IRouter 路由mod接口
+// IConnection 连接mod层接口
+// IMessage 消息mod接口
+// IDataPack 消息拆解接口
+// IMsgHandler 消息处理及协程池接口
+//
+// 当前文件描述:
+// @Title imessage.go
+// @Description 提供消息的基本方法
+// @Author Aceld - Thu Mar 11 10:32:29 CST 2019
package ziface
/*
diff --git a/ziface/imsghandler.go b/ziface/imsghandler.go
index b6f35d7..6fac36b 100644
--- a/ziface/imsghandler.go
+++ b/ziface/imsghandler.go
@@ -1,3 +1,16 @@
+// Package ziface 主要提供zinx全部抽象层接口定义.
+// 包括:
+// IServer 服务mod接口
+// IRouter 路由mod接口
+// IConnection 连接mod层接口
+// IMessage 消息mod接口
+// IDataPack 消息拆解接口
+// IMsgHandler 消息处理及协程池接口
+//
+// 当前文件描述:
+// @Title imsghandler.go
+// @Description 提供worker启动、处理消息业务调用等接口
+// @Author Aceld - Thu Mar 11 10:32:29 CST 2019
package ziface
/*
diff --git a/ziface/irequest.go b/ziface/irequest.go
index 43136a3..49734c7 100644
--- a/ziface/irequest.go
+++ b/ziface/irequest.go
@@ -1,3 +1,16 @@
+// Package ziface 主要提供zinx全部抽象层接口定义.
+// 包括:
+// IServer 服务mod接口
+// IRouter 路由mod接口
+// IConnection 连接mod层接口
+// IMessage 消息mod接口
+// IDataPack 消息拆解接口
+// IMsgHandler 消息处理及协程池接口
+//
+// 当前文件描述:
+// @Title irequest.go
+// @Description 提供连接请求全部接口声明
+// @Author Aceld - Thu Mar 11 10:32:29 CST 2019
package ziface
/*
diff --git a/ziface/irouter.go b/ziface/irouter.go
index 47a7782..788aa18 100644
--- a/ziface/irouter.go
+++ b/ziface/irouter.go
@@ -1,3 +1,16 @@
+// Package ziface 主要提供zinx全部抽象层接口定义.
+// 包括:
+// IServer 服务mod接口
+// IRouter 路由mod接口
+// IConnection 连接mod层接口
+// IMessage 消息mod接口
+// IDataPack 消息拆解接口
+// IMsgHandler 消息处理及协程池接口
+//
+// 当前文件描述:
+// @Title irouter.go
+// @Description 提供消息路由全部接口声明
+// @Author Aceld - Thu Mar 11 10:32:29 CST 2019
package ziface
/*
diff --git a/ziface/iserver.go b/ziface/iserver.go
index 4de5ba5..f235397 100644
--- a/ziface/iserver.go
+++ b/ziface/iserver.go
@@ -1,23 +1,27 @@
+// Package ziface 主要提供zinx全部抽象层接口定义.
+// 包括:
+// IServer 服务mod接口
+// IRouter 路由mod接口
+// IConnection 连接mod层接口
+// IMessage 消息mod接口
+// IDataPack 消息拆解接口
+// IMsgHandler 消息处理及协程池接口
+//
+// 当前文件描述:
+// @Title iserver.go
+// @Description 提供Server抽象层全部接口声明
+// @Author Aceld - Thu Mar 11 10:32:29 CST 2019
package ziface
-//定义服务器接口
+//定义服务接口
type IServer interface {
- //启动服务器方法
- Start()
- //停止服务器方法
- Stop()
- //开启业务服务方法
- Serve()
- //路由功能:给当前服务注册一个路由业务方法,供客户端链接处理使用
- AddRouter(msgID uint32, router IRouter)
- //得到链接管理
- GetConnMgr() IConnManager
- //设置该Server的连接创建时Hook函数
- SetOnConnStart(func(IConnection))
- //设置该Server的连接断开时的Hook函数
- SetOnConnStop(func(IConnection))
- //调用连接OnConnStart Hook函数
- CallOnConnStart(conn IConnection)
- //调用连接OnConnStop Hook函数
- CallOnConnStop(conn IConnection)
+ Start() //启动服务器方法
+ Stop() //停止服务器方法
+ Serve() //开启业务服务方法
+ AddRouter(msgID uint32, router IRouter) //路由功能:给当前服务注册一个路由业务方法,供客户端链接处理使用
+ GetConnMgr() IConnManager //得到链接管理
+ SetOnConnStart(func(IConnection)) //设置该Server的连接创建时Hook函数
+ SetOnConnStop(func(IConnection)) //设置该Server的连接断开时的Hook函数
+ CallOnConnStart(conn IConnection) //调用连接OnConnStart Hook函数
+ CallOnConnStop(conn IConnection) //调用连接OnConnStop Hook函数
}
diff --git a/zlog/stdzlog.go b/zlog/stdzlog.go
index 42cd585..133d24c 100644
--- a/zlog/stdzlog.go
+++ b/zlog/stdzlog.go
@@ -1,3 +1,12 @@
+// Package zlog 主要提供zinx相关日志记录接口
+// 包括:
+// stdzlog模块, 提供全局日志方法
+// zlogger模块, 日志内部定义协议,均为对象类方法
+//
+// 当前文件描述:
+// @Title stdzlog.go
+// @Description 包裹zlogger日志方法,提供全局方法
+// @Author Aceld - Thu Mar 11 10:32:29 CST 2019
package zlog
/*
diff --git a/zlog/zlogger.go b/zlog/zlogger.go
index 30d1d78..f135cdf 100644
--- a/zlog/zlogger.go
+++ b/zlog/zlogger.go
@@ -1,3 +1,12 @@
+// Package zlog 主要提供zinx相关日志记录接口
+// 包括:
+// stdzlog模块, 提供全局日志方法
+// zlogger模块, 日志内部定义协议,均为对象类方法
+//
+// 当前文件描述:
+// @Title zlogger.go
+// @Description 基础日志接口,包括Debug、Fatal等
+// @Author Aceld - Thu Mar 11 10:32:29 CST 2019
package zlog
/*
@@ -25,9 +34,9 @@ const (
BitDate = 1 << iota //日期标记位 2019/01/23
BitTime //时间标记位 01:23:12
BitMicroSeconds //微秒级标记位 01:23:12.111222
- BitLongFile // 完整文件名称 /home/go/src/zinx/server.go
- BitShortFile // 最后文件名 server.go
- BitLevel // 当前日志级别: 0(Debug), 1(Info), 2(Warn), 3(Error), 4(Panic), 5(Fatal)
+ BitLongFile //完整文件名称 /home/go/src/zinx/server.go
+ BitShortFile //最后文件名 server.go
+ BitLevel //当前日志级别: 0(Debug), 1(Info), 2(Warn), 3(Error), 4(Panic), 5(Fatal)
BitStdFlag = BitDate | BitTime //标准头部日志格式
BitDefault = BitLevel | BitShortFile | BitStdFlag //默认日志头部格式
)
@@ -53,22 +62,14 @@ var levels = []string{
}
type ZinxLogger struct {
- //确保多协程读写文件,防止文件内容混乱,做到协程安全
- mu sync.Mutex
- //每行log日志的前缀字符串,拥有日志标记
- prefix string
- //日志标记位
- flag int
- //日志输出的文件描述符
- out io.Writer
- //输出的缓冲区
- buf bytes.Buffer
- //当前日志绑定的输出文件
- file *os.File
- //是否打印调试debug信息
- debugClose bool
- //获取日志文件名和代码上述的runtime.Call 的函数调用层数
- calldDepth int
+ mu sync.Mutex //确保多协程读写文件,防止文件内容混乱,做到协程安全
+ prefix string //每行log日志的前缀字符串,拥有日志标记
+ flag int //日志标记位
+ out io.Writer //日志输出的文件描述符
+ buf bytes.Buffer //输出的缓冲区
+ file *os.File //当前日志绑定的输出文件
+ debugClose bool //是否打印调试debug信息
+ calldDepth int //获取日志文件名和代码上述的runtime.Call 的函数调用层数
}
/*
diff --git a/zlog/zlogger_test.go b/zlog/zlogger_test.go
index a0d51c4..cc84b76 100644
--- a/zlog/zlogger_test.go
+++ b/zlog/zlogger_test.go
@@ -1,39 +1,39 @@
-package zlog
+package zlog_test
import (
+ "github.com/aceld/zinx/zlog"
"testing"
)
func TestStdZLog(t *testing.T) {
//测试 默认debug输出
- Debug("zinx debug content1")
- Debug("zinx debug content2")
+ zlog.Debug("zinx debug content1")
+ zlog.Debug("zinx debug content2")
- Debugf(" zinx debug a = %d\n", 10)
+ zlog.Debugf(" zinx debug a = %d\n", 10)
//设置log标记位,加上长文件名称 和 微秒 标记
- ResetFlags(BitDate | BitLongFile | BitLevel)
- Info("zinx info content")
+ zlog.ResetFlags(zlog.BitDate | zlog.BitLongFile | zlog.BitLevel)
+ zlog.Info("zinx info content")
//设置日志前缀,主要标记当前日志模块
- SetPrefix("MODULE")
- Error("zinx error content")
+ zlog.SetPrefix("MODULE")
+ zlog.Error("zinx error content")
//添加标记位
- AddFlag(BitShortFile | BitTime)
- Stack(" Zinx Stack! ")
+ zlog.AddFlag(zlog.BitShortFile | zlog.BitTime)
+ zlog.Stack(" Zinx Stack! ")
//设置日志写入文件
- SetLogFile("./log", "testfile.log")
- Debug("===> zinx debug content ~~666")
- Debug("===> zinx debug content ~~888")
- Error("===> zinx Error!!!! ~~~555~~~")
+ zlog.SetLogFile("./log", "testfile.log")
+ zlog.Debug("===> zinx debug content ~~666")
+ zlog.Debug("===> zinx debug content ~~888")
+ zlog.Error("===> zinx Error!!!! ~~~555~~~")
//关闭debug调试
- CloseDebug()
- Debug("===> 我不应该出现~!")
- Debug("===> 我不应该出现~!")
- Error("===> zinx Error after debug close !!!!")
-
+ zlog.CloseDebug()
+ zlog.Debug("===> 我不应该出现~!")
+ zlog.Debug("===> 我不应该出现~!")
+ zlog.Error("===> zinx Error after debug close !!!!")
}