承接前文,taskmain 的第三步驟呼叫 Topology::parse(topology_file) 解析拓撲檔案並啟動 Network 物件。本文深入剖析 Topology、Euclidian 子類別、Failure Model 以及 Network 之間的交互流程。

Topology::parse() 先從檔案讀取拓撲類型(如 Euclidian)與失效模型(Failure Model,用於定義封包遺失策略)。若未指定,預設使用無遺失的 nullfailure 模型。Network 建構函數。Network 建構子內部保存 topology 與 failure model 指標,並啟動一條 task(輕量級執行緒)執行 run() 函式。run() 開啟一個 channel(libtask 通訊機制),持續從通道讀取 Topology 送來的 Node(peer)資訊,存入自身的 _nodes(IPaddress → Node* map)。Topology::parse() 接著呼叫具體子類別(如 Euclidian)的 parse() 完成後續解析。Euclidian 依據 IPaddress x y 格式解析每個 peer 在二維空間的座標,並以 IP 位址為鍵值。每解析一筆記錄,即透過工廠模式建立 Node 子類別物件,同時:
_nodes(IPaddress → Node* map)channel 發送給 Network::run() 執行緒流程圖中的黃綠色箭頭即標示此雙向同步機制。
| 類別 | 職責 |
|---|---|
Topology (base) | 定義通用解析介面,持有 _nodes map |
Euclidian | 具體實作:解析座標、建立 Node、透過 channel 傳給 Network |
FailureModel | 封裝封包遺失/錯誤模擬邏輯(預設 nullfailure) |
Network | 擁有全域節點視圖,啟動 task 循環接收節點資訊,提供上層路由/傳輸服務 |
Node | 代表一個 peer,含 IP、位置、連線狀態等屬性 |
理解 Topology 解析 → Node 建立 → channel 傳遞 → Network 聚合 這條主線,即掌握了 P2PSim 從啟動到形成完整網路拓撲的核心機制。後續章節將進一步探討路由演算法與訊息傳遞流程。