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

Muduo網絡編程示例之九:基於 TCP 的簡單發布訂閱廣播服務

     編輯:關於C語言

應用層廣播與 Pub/Sub 模型

分散式系統除點對點通信,常需一對多廣播。本示例實現一個 Hub 服務:Publisher 發布消息到 Topic,Subscriber 訂閱 Topic 接收消息。類似分散式 Observer Pattern,實現解耦。基於 TCP,可靠性優於 UDP(但非 100% 可靠)。

應用場景

  • 體育比分直播:各場地發布比分到對應 Topic,大屏/網頁訂閱顯示。消息為快照(當前比分)而非增量。
  • 負載監控:各機器發布 CPU/網絡/磁碟負載到以主機名命名的 Topic,監控程式統一訂閱。消息含時間戳防止過期數據。
  • 服務發現與監控:服務程式發布自身負載,供 Load Balancer 訂閱決策。

文本協議設計

為便於 telnet 測試,採用換行分隔的文本協議,三條指令:

sub <topic>       # 訂閱,立即收到該 Topic 最新消息
unsub <topic>     # 退訂
pub <topic> <content> # 發布,所有訂閱者收到 "pub <topic> <content>"

架構組件

  1. hub 服務程式:核心分發邏輯,維護訂閱關係。
  2. pubsub 庫:客戶端 SDK,封裝訂閱/發布/退訂,單 TCP 連線複用。
  3. sub 示例:命令列訂閱工具。
  4. pub 示例:命令列發布工具。

使用範例

# 終端 1: 啟動 Hub
$ hub 9999

# 終端 2: 訂閱 mytopic
$ sub 127.0.0.1:9999 mytopic

# 終端 3: 訂閱 mytopic 和 court
$ sub 127.0.0.1:9999 mytopic court

# 終端 4: 發布消息
$ pub 127.0.0.1:9999 mytopic "Hello world."
# 終端 2、3 均顯示: mytopic: Hello world.

$ pub 127.0.0.1:9999 court "13:11"
# 終端 3 顯示: court: 13:11
# 終端 2 無輸出

進階應用:通信透明化監控

將原本端對端的 RPC(如 A→B SOAP)改為 Pub/Sub:A 發布到 topic_a_to_b,B 回應到 topic_b_to_a。掛載監控訂閱者即可無側邊查看通信內容,極大簡化 Trouble Shooting。

單點故障思考

Hub 是 Single Point of Failure。解決方案:多 Hub 叢集 + 一致性哈希路由、或引入 Raft/Paxos 實現高可用(超出本示例範圍)。

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