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

Muduo 實現基於 TCP 的應用層消息廣播 Hub(Pub/Sub)

     編輯:關於C++

架構與應用場景

Hub 為應用層廣播服務,Publisher 發送消息到 Topic,Subscriber 訂閱 Topic 接收消息。類似分布式 Observer Pattern,走 TCP 保證「比 UDP 可靠」。典型用例:

  • 體育比分轉播:各場地發布到 court1、court2…,大屏/網頁訂閱顯示。
  • 負載監控:各機器發布 hostname Topic,Load Balancer/Monitor 訂閱聚合。

消息建議用 Snapshot(當前狀態)而非 Incremental,避免丟包導致狀態不一致。

文本協議設計

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

同一 Topic 同一時間僅允許一 Publisher,Hub 不提供 CAS。

代碼結構

  • hub.cc:核心分發邏輯,維護 topic → subscriber set 映射。
  • pubsub.h/cc:Client Library,封裝訂閱/發布/退訂,單 TCP 連接支援雙向角色。
  • sub.cc / pub.cc:命令行測試工具。

快速體驗

# 終端 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

進階應用:通訊監控

將原本 End-to-End 的 SOAP/TCP 通訊改為 Pub/Sub,掛載 Monitoring Subscriber 即可無側錄流量、排查故障,極大簡化分布式系統可觀測性建設。

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