机器翻译正文由机器翻译自项目原始文档(英文),排版经程序统一处理,可能存在偏差,请以原项目仓库为准。
English | 简体中文
Zinx 是一个基于Golang的轻量级并发服务器框架
开发者文档
说明:目前zinx已经在很多企业进行开发使用,具体使用领域包括:后端模块的消息中转、长连接游戏服务器、Web框架中的消息处理插件等。zinx的定位是代码简洁,让更多的开发者迅速的了解框架的内脏细节并且可以快速基于zinx DIY(二次开发)一款适合自己企业场景的模块。
zinx源码地址
| 平台 | 条目 |
|---|---|
| Github | https://github.com/aceld/zinx |
| Gitcode | https://gitcode.com/aceld/zinx |
| Gitee | https://gitee.com/Aceld/zinx |
官网
在线开发教程
文字教程
| 平台 | 条目 |
|---|---|
| Zinx 框架教程——基于 Golang 的轻量级服务器 | |
| 《Golang轻量级并发服务器框架zinx》 |
视频教程
| 平台 | 网络视频 |
|---|---|
一、写在前面
我们为什么要做Zinx,Golang目前在服务器的应用框架很多,但是应用在游戏领域或者其他长连接的领域的轻量级企业框架甚少。
设计Zinx的目的是我们可以通过Zinx框架来了解基于Golang编写一个TCP服务器的整体轮廓,让更多的Golang爱好者能深入浅出的去学习和认识这个领域。
Zinx框架的项目制作采用编码和学习教程同步进行,将开发的全部递进和迭代思维带入教程中,而不是一下子给大家一个非常完整的框架去学习,让很多人一头雾水,不知道该如何学起。
教程会一个版本一个版本迭代,每个版本的添加功能都是微小的,让一个服务框架小白,循序渐进的曲线方式了解服务器框架的领域。
当然,最后希望Zinx会有更多的人加入,给我们提出宝贵的意见,让Zinx成为真正的解决企业的服务器框架!在此感谢您的关注!
二、初探Zinx架构
.jpg?raw=true)
三、Zinx开发接口文档
(1)快速开始
版本 Golang 1.17
下载 zinx 源码
$go get github.com/aceld/zinx
注意:Golang 版本 1.17
Zinx-服务器
package main
import (
"fmt"
"github.com/aceld/zinx/ziface"
"github.com/aceld/zinx/znet"
)
// PingRouter MsgId=1的路由
type PingRouter struct {
znet.BaseRouter
}
//Ping Handle MsgId=1的路由处理方法
func (r *PingRouter) Handle(request ziface.IRequest) {
//读取客户端的数据
fmt.Println("recv from client : msgId=", request.GetMsgID(), ", data=", string(request.GetData()))
}
func main() {
//1 创建一个server服务
s := znet.NewServer()
//2 配置路由
s.AddRouter(1, &PingRouter{})
//3 启动服务
s.Serve()
}
运行服务器
$ go run server.go
██
▀▀
████████ ████ ██▄████▄ ▀██ ██▀
▄█▀ ██ ██▀ ██ ████
▄█▀ ██ ██ ██ ▄██▄
▄██▄▄▄▄▄ ▄▄▄██▄▄▄ ██ ██ ▄█▀▀█▄
▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀ ▀▀ ▀▀ ▀▀▀ ▀▀▀
┌──────────────────────────────────────────────────────┐
│ [Github] https://github.com/aceld │
│ [tutorial] https://www.yuque.com/aceld/npyr8s/bgftov │
└──────────────────────────────────────────────────────┘
[Zinx] Version: V1.0, MaxConn: 12000, MaxPacketSize: 4096
===== Zinx Global Config =====
TCPServer: <nil>
Host: 0.0.0.0
TCPPort: 8999
Name: ZinxServerApp
Version: V1.0
MaxPacketSize: 4096
MaxConn: 12000
WorkerPoolSize: 10
MaxWorkerTaskLen: 1024
MaxMsgChanLen: 1024
ConfFilePath: /Users/Aceld/go/src/zinx-usage/quick_start/conf/zinx.json
LogDir: /Users/Aceld/go/src/zinx-usage/quick_start/log
LogFile:
LogIsolationLevel: 0
HeartbeatMax: 10
==============================
2023/03/09 18:39:49 [INFO]msghandler.go:61: Add api msgID = 1
2023/03/09 18:39:49 [INFO]server.go:112: [START] Server name: ZinxServerApp,listenner at IP: 0.0.0.0, Port 8999 is starting
2023/03/09 18:39:49 [INFO]msghandler.go:66: Worker ID = 0 is started.
2023/03/09 18:39:49 [INFO]msghandler.go:66: Worker ID = 1 is started.
2023/03/09 18:39:49 [INFO]msghandler.go:66: Worker ID = 3 is started.
2023/03/09 18:39:49 [INFO]msghandler.go:66: Worker ID = 2 is started.
2023/03/09 18:39:49 [INFO]msghandler.go:66: Worker ID = 4 is started.
2023/03/09 18:39:49 [INFO]msghandler.go:66: Worker ID = 6 is started.
2023/03/09 18:39:49 [INFO]msghandler.go:66: Worker ID = 7 is started.
2023/03/09 18:39:49 [INFO]msghandler.go:66: Worker ID = 8 is started.
2023/03/09 18:39:49 [INFO]msghandler.go:66: Worker ID = 9 is started.
2023/03/09 18:39:49 [INFO]msghandler.go:66: Worker ID = 5 is started.
2023/03/09 18:39:49 [INFO]server.go:134: [START] start Zinx server ZinxServerApp succ, now listenning...
Zinx-客户端
package main
import (
"fmt"
"github.com/aceld/zinx/ziface"
"github.com/aceld/zinx/znet"
"time"
)
//客户端自定义业务
func pingLoop(conn ziface.IConnection) {
for {
err := conn.SendMsg(1, []byte("Ping...Ping...Ping...[FromClient]"))
if err != nil {
fmt.Println(err)
break
}
time.Sleep(1 * time.Second)
}
}
//创建连接的时候执行
func onClientStart(conn ziface.IConnection) {
fmt.Println("onClientStart is Called ... ")
go pingLoop(conn)
}
func main() {
//创建Client客户端
client := znet.NewClient("127.0.0.1", 8999)
//设置连接建立成功后的钩子函数
client.SetOnConnStart(onClientStart)
//启动客户端
client.Start()
//防止进程退出,等待中断信号
select {}
}
运行客户端
$ go run client.go
2023/03/09 19:04:54 [INFO]client.go:73: [START] Zinx Client LocalAddr: 127.0.0.1:55294, RemoteAddr: 127.0.0.1:8999
2023/03/09 19:04:54 [INFO]connection.go:354: ZINX CallOnConnStart....
Zinx 打印终端:
recv from client : msgId= 1 , data= Ping...Ping...Ping...[FromClient]
recv from client : msgId= 1 , data= Ping...Ping...Ping...[FromClient]
recv from client : msgId= 1 , data= Ping...Ping...Ping...[FromClient]
recv from client : msgId= 1 , data= Ping...Ping...Ping...[FromClient]
recv from client : msgId= 1 , data= Ping...Ping...Ping...[FromClient]
recv from client : msgId= 1 , data= Ping...Ping...Ping...[FromClient]
...
(2)Zinx配置文件
{
"Name":"zinx v-0.10 demoApp",
"Host":"0.0.0.0",
"TCPPort":9090,
"MaxConn":3,
"WorkerPoolSize":10,
"LogDir": "./mylog",
"LogFile":"app.log",
"LogSaveDays":15,
"LogCons": true,
"LogIsolationLevel":0
}
Name:服务器应用名称
Host:服务器IP
TcpPort:服务器监听端口
MaxConn:允许的客户端连接最大数量
WorkerPoolSize:工作任务池最大工作Goroutine数量
LogDir: 日志文件夹
LogFile: 日志文件名称(如果不提供,则日志信息打印到Stderr)
LogIsolationLevel: 日志隔离级别 0:全开, 1:关debug, 2:关debug/info, 3:关debug/info/warn
开发者
| Zinx | 开发者 |
|---|---|
| zinx | 刘丹冰(@aceld) 张超(@zhngcho) 高智辉Roger(@adsian) 胡贵建(@huguijian) 张继瑀(@kstwoak) 夏小力(@xxl6097) 李志成(@clukboy)姚承政(@hcraM41)李国杰(@LI-GUOJIE)余喆宁(@YanHeDoki) |
| moke-kit(微服务框架) | GStones(@GStones) |
| zinx(C ) | 刘洋(@marklion) |
| zinx(Lua) | 胡琪(@huqitt) |
| ginx(Java) | 模块代码(@ModuleCode) |
感谢所有为zinx贡献的开发者
关于作者:
作者:Aceld(刘丹冰)
mail: danbing.at@gmail.com
github: https://github.com/aceld
原创书籍: https://www.yuque.com/aceld
加入Zinx技术社区
| 平台 | 入口 |
|---|---|
| https://discord.gg/xQ8Xxfyfcz | |
加微信: ace_ld 或扫二维码,备注zinx即可。 |
|
| 微信公众号 | |
| QQ群 |
- 本文标题:zinx - 一个基于Golang的轻量级并发服务器框架
- 本文链接:https://www.cn121.com/webapp/aceld-zinx.html
- 原项目:aceld/zinx 版权归原作者 aceld 及贡献者所有
- 收录信息:本站于 2026-10-05 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
- 开源协议:收录时本项目采用 MIT(查看 LICENSE 原文),本站译文为其衍生内容;使用、修改、分发请以该仓库 LICENSE 原文为准。
- 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 aceld/zinx。
- 翻译说明:本页正文为人工智能生成内容——由机器翻译对原项目 README 初译、经程序校验排版,可能存在错漏,请以原项目文档为准。
- 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
- 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。