首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

MarioTCP:基於 Libevent 的高性能多線程 TCP 服務器框架

     編輯:關於C語言

MarioTCP(超級馬里奧)開源項目,不僅高效,而且超級簡易好玩。也是優秀的 Linux C 開發學習工程。掌握全項目可成 Linux C 牛人;亦可通過 mario.c 示例快速入門。

極致性能測試數據

  • 單機最大帶寬吞吐 1000M
  • 最高 TCP 長連接 100 萬
  • 每秒處理連接數 4 萬 (CPS),系統 load 極低
  • 經完備測試,運行穩定、資源佔用極少

下載:SourceForge | CSDN | 51CTO

五步構建自定義業務 TCP 服務器

  1. 初始化 SERVER
    SERVER* server = init_server(port, workernum, connnum, read_timeout, write_timeout);
    workernum * connnum = 最大長連接數,單 worker 輕鬆支撐 10 萬連接。
  2. 實現並註冊業務邏輯
    透過 regist_akg_func(uint16 id, FUNC_PTR func) 註冊。
    ID 範圍 0-65535,封裝在 MarioTCP 協議中。
    例:新增 "say_hello" 服務 → 定義 CMD → 實現函數解析請求、寫回響應 → 註冊。
  3. 啟動日誌線程 start_log_thread()
  4. 啟動服務器 start_server((void*)server);

架構亮點:為何超級高效

  1. 零分配零銷毀:啟動時初始化所有結構體與記憶體,運行期無銷毀、無回收(拿來即用、用完即可)。
  2. 單 Master Accept:測試證實多線程 Accept 極限下無優勢,單 Master 避免同步鎖開銷。
  3. 單一生產者-消費者無鎖通信:Master 分發連接、後續連接處理、業務邏輯、日誌系統全程無鎖。
  4. 每 Worker 獨立 Libevent 實例:單 Libevent 處理 10 萬長連接性能最大化,多 Worker 獨立實例開銷極小、性能極高。

百萬長連接、四萬 CPS 測試環境調優

  1. 系統最大文件數設為 unlimited
  2. TCP 記憶體核心參數調至 256M+
  3. 配置 15 個 IP,理論支撐 15 × (65535-1024) 連接
  4. 客戶端用 epoll/libevent,單進程 5 萬連接,20 客戶端進程 = 100 萬連接,每秒隨機斷開/新建 1000 連接並發包
  5. 服務端開啟 SYN_WAIT 重用,客戶端主動斷開避免端口堆積

Go On 1.0.0 待解決議題

  1. 協議優化:現有 HEAD(STX, PKGLEN, AKG_ID) + Data 格式,能否更簡化或無協議?
  2. 日誌系統重構:現系統過於死板、耦合架構。
  3. 業務邏輯穩定性:Worker 線程池固定、死線程不可重啟、Master 缺乏 Worker 存活監控,業務阻塞導致任務堆積。計劃抽象出監控、告警、自動恢復機制。

本文出自 MarioTCP 開源項目,作者馮建華 (JohnFong)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved