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

Muduo 實戰(十):從 TCP Relay 到 SOCKS4a 代理,再到 n:1 / 1:n 連接轉發架構

     編輯:關於C語言

TCP Relay(窮人的 tcpdump)

客戶端 → Relay → Server,T 字結構。Relay 記錄通訊內容,可注入延遲、翻轉比特模擬故障。
TCP Relay 架構

核心挑戰

  1. 連接建立順序:accept C 後再 connect S,S 未就緒前 C 來數據怎麼辦?(緩衝)
  2. 多併發連接管理:防止串話。
  3. 斷開協同:任意一方斷開,另一方立即斷;fd 復用導致串話如何避免?
  4. 速度不匹配:C 100KB/s,S 10MB/s(chargen),Relay 緩衝區會爆?非阻塞 + 水平觸發如何限速?

思考:若用原始 Socket API 如何解決?

SOCKS4a 代理服務器

與 Relay 類似,但目標地址由客戶端指定。accept C → 讀取幾字節解析目標地址 → connect S。
標準網絡服務,可供瀏覽器直接使用(作者即如此測試)。

n:1 / 1:n 連接轉發

  • n:1:多客戶端 → 單後端(多路復用器,即《示例七》Multiplexer)。
  • 1:n:單客戶端 → 多後端(分發器)。
  • SOCKS 代理:本文實現的 SOCKS4a。

雲風《寫了一個 proxy 用途你懂的》隧道思路:三級聯。作者用 Muduo 實現前兩級,未做數據混淆,不可翻牆。讀者可自行級聯嘗試。

系列告一段落 & 未來規劃

四個月 11 篇,涵蓋單線程 TCP 客戶端/服務端核心功能。Muduo 更強大:
• 內置靈活線程模型(當前例子瓶頸在 IO,多線程優勢未現)。
• 高級應用:Channel+signalfd 處理信號、第三方非阻塞庫(ZooKeeper C 客戶端、libpq)集成 EventLoop。
後續將發布:網絡編程學習經驗談、基於 Muduo 的分布式系統實戰(Paxos 實現高可用 KV、Naming Service、機群管理系統)。

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