程式的總架構圖可以在http://pdos.csail.mit.edu/p2psim/p2psim-classes.pdf得到(好像是貼不了圖嗎?)
在看原始碼的時候就可以參照這個總類圖,這樣就可以比較容易知道程式的來朧去脈。
總體流程說明(網上轉載有修改) –先有一個總體認識
(1)節點node類比成運行P2P演算法的機器,通過Network相互之間發送和接收資料報。Network中的兩個結點的Latency通過toplogy來決定
(2)ChurnGenerator類比P2P網路的動態性,它周期性的加入節點或撤銷節點。 (3)LookupGenerator周期性的發出lookup查詢請求來增加網路的負載。
(4)每個節點有join和lookup方法,調用join初始化結點得routing table,並和其它node聯絡,讓自己加入到P2P網路中結點通過周期性調用stabilization routine來重新整理自己的routing table
(5)節點通過調用RPCs相互連訊,RPCs會調用Network裡的方法。
(6)在Network收到一個資料包時,它會計算髮送者和接收者之間得latency.當接收結點dead,Network通過error-RPC-reply機制 (n次)類比逾時。
(7)程式採用thread類比實現結點的離散事件,比如A結點發出LOOKUP請求給B結點,並且A處於等待狀態;B在完成查詢操作後,將結果返回給A,並通知A繼續執行下去。
(8)通過任務隊列EventQueue來儲存事件
(8)線程之間的非同步作業並不是通過我們熟悉的訊號量、共用記憶體等傳統POSIX方式,而是採用Alef Programming Model,通過channel的send和recv操作,實現task之間的互斥和同步。Alef的具體實現技術請參看http://swtch.com/~rsc/thread/ug.pdf
後面就從main開始分析原始碼實現咯!
在進一步深入原始碼學習前,先擬定個學習計劃:
(1)在程式中使用了大量的模式設,所以在看原始碼前最好先惡補一下以下模式,:Factory,Singleton,Observer,Mediator
(C++的肯定要看Gof的Design Pattern啦,什嗎?沒聽過~~)
(2)C++基礎這個不用說啦,STL相關的set, map, vector, hash_map 等會大量用到,所以這方面也要先瞭解
(3)在看的過程中邊做筆記邊總結,看清楚了一部分後就可以畫畫流程圖等,當然如果只是用於測試資料而不是研究代碼的話,只要學會修改就可以了,具體協議實現在/protocol下