《c# 實現p2p文件分享與傳輸系統》 一、 模型
c#實現P2P文件分享與傳輸系統
一、模型
P2P的概念大家都不陌生,也就是所謂的“點對點傳輸”,即不直接通過服務器,在兩臺或多臺客戶端之間傳輸數據,實現信息交流和資源共享。P2P技術已經發展了很多年了,雖然理論上已經發展了很多的模型,但在實際的網絡環境中(尤其是鎮里這種環境),究竟怎樣的網絡結構才具有較好的穩定性和較高的傳輸性能,還是有很大的爭議,每家做P2P的網絡公司都會有不同的見解。當前,P2P技術應用的主要目的還是減輕服務器工作壓力,本人不才,之前曾在國內某網絡軟件公司里擔任p2p相關的流媒體項目開發,對于P2P技術所創造的能力和帶來的價值深有體會,也曾被它的復雜性所折磨的痛苦不已,不過,這也是我所珍惜的一筆寶貴的知識財富。
似乎扯遠了。。。趕緊回來,前段時間做了一個c#實現p2p文件傳輸系統的項目。以前都是用c/c++,這還是第一次用c#來做這種項目,由于用c++比用c#要早的多,所以寫c#程序不免會帶些c++的習慣,不過不影響程序整體。第一步:設計。對于“文件分享和傳輸”這種典型的p2p應用,可以使用成熟的模型和框架:
上面這個圖里面有幾個固定的端點:Peer、Tracker Server、NAT Server和Source Server,還有兩個游離的元素:數據和下載節點,它們構成了一個完整的p2p網絡。在這個網絡中,它們各司其職,維系著網絡的運轉。
Peer?整個系統的核心所在,主要負責資源提供和資源索取,驅動著網絡的運行。也只有Peer,是唯一的一個必須存在的元素。
Tracker Server?如其名所述,動態、實時地監視著整個網絡中peer節點的狀態和資源分布,向下載節點提供p2p資源查詢的重要功能,通過tracker server,下載節點可以迅速而準確的獲取網絡中擁有資源的節點列表,展開p2p下載。
NAT Server?負責NAT穿透,也形象的稱為“打洞”。對于藏在受限型NAT網絡后面的節點,不通過NAT Server做穿透的話,是無法和NAT后面的節點進行通信的,而目前大部分人是沒有公網IP的,NAT Server對于組建p2p網絡十分的重要。對于NAT穿透,我會在后面的文章中解釋。
Source Server?負責資源提供或資源發布,一般網絡公司建立的p2p網絡,會有這種服務器來發布需要推廣和擴散的資源。
這個模型基本涵蓋了p2p網絡架構的主要幾個部分,在具體實施的時候會根據不同的資源類型有不同的變化,通常會更加的復雜,當然,也有可能更簡單。比如,DHT(Distributed Hash Table)?網絡,這種網絡,以不需要服務器的參與來完成p2p的查詢與傳輸為主要特點,例如大家常用的eMule中的KAD網絡,就是一種DHT網絡。但其實,DHT中,是peer節點,負責了Tracker Server和Source Server的工作。也就是peer變得比較復雜,如果把它拆開來看,也基本就是這個模型。Peer的復雜化,可以降低服務器運行壓力,但就犧牲了實時性,對于實時性和準確性要求高的應用,例如流媒體,不太適合DHT,當然,這并不妨礙DHT作為輔助手段來探知更多的資源節點。
我要做的這個“EasyP2P”文件分享與傳輸系統,目前暫時不需要Source Server,由Peer負責Source Server的功能,也就是資源的發布;Tracker Server負責節點和資源的查詢;NAT Server依然負責打洞。于是,變化成如下結構:
?
這就是EasyP2P系統的模型,接下來,將根據這個模型,來具體設計整個網絡的架構和運行流程。
網絡 C#
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。