程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> P2Psim分析筆記(4)-Topology 和Network

P2Psim分析筆記(4)-Topology 和Network

編輯:關於C語言

  在上篇的分析理,taskmain的第三步是讓Topology類來分析topology_file,從而啟動了Network對象。這次,我主要介紹這部分的詳細流程。主要內容包括對Topology類以及子類Euclidian拓撲類的機制分析,Failure Model類以及Network類的交互。搞清楚這些,基本就把P2PSim的啟動機制搞清楚了。按照慣例,我在這裡給出了所涉及的流程的大體流程圖。 無命名         這部分的調用是taskmain函數中的Topology::parse(topology_file)引起的。在pase函數中,首先從topology_file裡面讀出了topology的名字,例如Euclidian拓撲, 以及對應的failure模型。至於failure模型,好像是用來制定數據傳輸中的丟包策略的。這個目前不是我的興趣所在,所以我也懶得去仔細分析了。如果在topology_file裡面不指定的話,在這裡會默認提供一個無丟包的nullfailure模型。    在生成topology和failure模型中,他們的構造函數都不會做什麼特別的工作。然後這兩個對象top和fm被作為參數來構造Network的對象實例。在Network對象的構造中,topology和failure模型會被保存到Network對象裡面。以後只能有Network的實例來訪問了。最後Network對象構造中會調用thread來讓run函數作為一個task來跑。這個函數中,Network實例開了一個channellibtask中task進行通信的機制),然後就不斷從這個channel讀取來自topology對象的Node也就是peer)信息。然後存到自己的_nodes成員中,這個成員是IPaddress 和Node指針的一個map。   最後,Topology::parse)調用了topology對象的parse完成了topology_file的剩余部分的解析。這裡要注意toplogy對象top指針 )是指向Topology類的一個子類的對象,比如Euclidian類的對象。 接下來,我們拿Euclidian拓撲來舉例,這個對象按照
        IPaddress  x,y
的格式來解析peer在空間中的位置,以及用ipaddress來標識peer。解析出每條記錄,都通過工廠模式,構造出一個Node類的子類的對象,除了保存在自己的_nodes成員中也是一個IPaddress 到node的map),通過channel發送給Network對象的run函數。圖中的黃綠色箭頭表示出這個聯系。

本文出自 “Nathan的技術空間” 博客,請務必保留此出處http://nathanxu.blog.51cto.com/50836/247545

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved