Go 语言作为服务器开发的热门语言之一,目前已拥有众多的服务器应用框架。然而,应用在长链接领域的服务器框架较少,尤其是游戏服务器方面,没有一个比较全面的框架。

zinx
简介
Zinx,是 aceld 在 Github 和 Gitee 上开源的轻量级并发服务器框架,目前版本为 v1.0.0。
值得一提的是,Zinx 在 Youtube 和 B站 上提供了在线的视频教程,从零开始,一步步讲解整个框架的开发过程,对于学习 Go 语言和服务器相关有很高的学习参考价值。
Zinx 的具体适用领域包括:
- 后端模块的消息中转
- 长链接游戏服务器
- Web框架中的消息处理插件
Zinx 的定位是代码简洁,可以让更多的开发者迅速地了解框架的内部细节,并且可以快速基于 Zinx DIY一款适合自己企业场景的模块。

zinx
使用
Zinx 的基本架构如下:

zinx
想要使用 Zinx,下载源码后,使用 Make 编译:
$ cd zinx/
$ make
启动 Demo Server
$ cd example/zinx_server
$ ./server
然后在另一终端启动 demo client 进行测试:
$ cd example/zinx_client
$ ./client
==> Test Router:[Ping] Recv Msg: ID= 2 , len= 21 , data= DoConnection BEGIN... ==> Test Router:[Ping] Recv Msg: ID= 0 , len= 18 , data= ping...ping...ping
==> Test Router:[Ping] Recv Msg: ID= 0 , len= 18 , data= ping...ping...ping
==> Test Router:[Ping] Recv Msg: ID= 0 , len= 18 , data= ping...ping...ping
...

zinx
基于Zinx框架开发的服务器应用,主函数步骤比较精简,只需要3步:
- 创建server句柄
- 配置自定义路由及业务
- 启动服务
func main() {
//1 创建一个server句柄
s := znet.NewServer()
//2 配置路由
s.AddRouter(0, &PingRouter{})
//3 开启服务
s.Serve()
}
其中自定义路由及业务配置方式如下:
import (
"fmt"
"github.com/aceld/zinx/ziface"
"github.com/aceld/zinx/znet"
)
//ping test 自定义路由
type PingRouter struct {
znet.BaseRouter
}
//Ping Handle
func (this *PingRouter) Handle(request ziface.IRequest) {
//先读取客户端的数据
fmt.Println("recv from client : msgId=", request.GetMsgID(), ", data=", string(request.GetData()))
//再回写ping...ping...ping
err := request.GetConnection().SendBuffMsg(0, []byte("ping...ping...ping"))
if err != nil {
fmt.Println(err)
}
}
可以通过配置文件的方式对应用进行配置:
{
"Name":"zinx v-0.10 demoApp",
"Host":"127.0.0.1",
"TcpPort":7777,
"MaxConn":3,
"WorkerPoolSize":10,
"LogDir": "./mylog",
"LogFile":"zinx.log"
}
总结
Zinx 作为一个基于 Golang 的轻量级并发服务器框架,为相关领域和应用的开发提供了参考,能够为企业级的自定义框架提供基本蓝图。同时,其提供了同步的文字和视频教程,这对于进行相关学习的开发者而言十分有益。

zinx