golang 每日一庫之 Zinx

Zinx 是一個用 Go 語言編寫的輕量級、併發 TCP 服務器框架,旨在幫助初學者深入理解 TCP 服務端開發的核心架構,同時具有生產級特性的模塊化設計 。

倉庫地址

https://github.com/aceld/zinx

設計理念

快速上手

使用 Zinx 實現一個基本 TCP 服務僅需三步 :

func main() {
    s := znet.NewServer()
    s.AddRouter(1, &PingRouter{})
    s.Serve()
}
type PingRouter struct {
    znet.BaseRouter
}
func (r *PingRouter) Handle(req ziface.IRequest) {
    fmt.Println("recv:", string(req.GetData()))
    req.GetConnection().SendBuffMsg(0, []byte("ping...ping..."))
}

這裏簡單給個例子,如果你感興趣,請閱讀項目的中文 readme。

https://github.com/aceld/zinx/blob/master/README-CN.md

核心概念

  1. Server

    :監聽 TCP 端口,管理連接、消息、線程池、Hook 鉤子(連接啓動 / 停止) 。

  2. Connection

    :封裝 TCP 鏈接,實現讀 / 寫 goroutine 分離,支持發送緩存機制和安全關閉

  3. Router

    :基於消息 ID 路由請求,可自定義或繼承 BaseRouter,包含 PreHandle/Handle/PostHandle 三個階段。

  4. Message & DataPack

    :TLV 封包協議,支持任意長度消息拆包、封包。

  5. MsgHandler & WorkerPool

    :支持異步併發處理,通過消息隊列分發到 worker goroutines,提升吞吐能力

  6. ConnManager

    :集中管理活動連接,並支持最大連接數控制

  7. 全局配置

    :通過 JSON 或代碼設定參數,如 Name、Host、Port、MaxConn、WorkerPoolSize 等

  8. 鏈接屬性

    :Connection 上支持 Set/Get/Remove 屬性,可綁定業務上下文

  9. 擴展機制

    :可自定義協議、中間件、心跳檢測等機制

模塊圖

模塊之間清晰分界:

Server
 ├─ ConnManager
 ├─ MsgHandler (含 WorkerPool)
 ├─ Router Map[msgID → Router]
 └─ Global Config

Connection
 ├─ Reader Goroutine (TLV 拆包 → MsgHandler)
 └─ Writer Goroutine (讀 msgChan → 寫入 TCP)

Message/DataPack

應用場景

簡單羅列優缺點

| 優點

|

缺點

| | --- | --- | |

源碼清晰、易學易用

|

功能相對基礎,部分場景需自行擴展

| |

模塊化,支持自定義協議、Hook、自定義路由

|

社區活躍程度一般,需關注版本兼容

| |

支持高併發玩家、連接、消息分發

|

相比社區成熟框架,生態插件較少

|

總結

Zinx 是一個非常適合學習併入門 Go TCP 併發服務器設計的框架。

它結構清晰、代碼簡潔、實現貼合實用,且支持擴展和定製。

若你正在開發聊天服務器、遊戲服務端或學習併發網絡編程,Zinx 是一個很好的起點。

標題:golang 每日一庫之 Zinx
作者:mooncakeee
地址:http://blog.dd95828.com/articles/2025/06/09/1749444142177.html
聯繫:scotttu@163.com

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/oNhyxWKOHaq7U3eSJiLXDA