朱苗苗 牛國鋒
摘要:該文基于對等網(wǎng)絡(P2P)設計了一種即時通信系統(tǒng),該系統(tǒng)采用基于中心服務器的中心化拓撲結(jié)構(gòu),利用SOCKET編程實現(xiàn)。與傳統(tǒng)的C/S模式相比,該模式大大弱化了服務器的作用,服務器只是為維護用戶列表,用戶之間的通信完全是點對點的,不需要經(jīng)過服務器中轉(zhuǎn),從而能夠承載更多的用戶,大大提高了網(wǎng)絡效率。
關鍵詞:P2P;即時;通信系統(tǒng);SOCKET
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2014)01-0072-04
隨著Internet的快速發(fā)展,人們在日常生活工作中應用網(wǎng)絡即時通信工具,相互之間的通信交流越來越頻繁,但是以往廣泛采用的傳統(tǒng)通信系統(tǒng)都是通過中間的服務器來中轉(zhuǎn)實現(xiàn)數(shù)據(jù)傳輸和交換的,這樣的系統(tǒng)勢必對起主要作用的中心服務器具有較強的依賴,中心服務器在遭受網(wǎng)絡攻擊或服務器出錯的情況下,將有可能導致整個網(wǎng)絡系統(tǒng)被破壞而陷于癱瘓,因此這樣的系統(tǒng)安全性就受到了很大考驗,而且隨著用戶的增加,當遭遇網(wǎng)絡瓶頸時服務器就會不堪重負,極大地危機到網(wǎng)絡安全。
當前正處于互聯(lián)網(wǎng)技術大發(fā)展時代,網(wǎng)絡上各種基于P2P的應用軟件也正在蓬勃發(fā)展,層出不窮,技術也日趨成熟,隨著網(wǎng)絡用戶數(shù)量的不斷增加,傳統(tǒng)的分布式網(wǎng)絡系統(tǒng)已不能滿足人們對于Internet高性能的需求,與之相比,P2P技術具有無可比擬的優(yōu)越性。同時,P2P技術也在不斷地完善和成熟,并將應用到商業(yè)領域、網(wǎng)絡通訊、政府信息以及軍事領域等,具有廣闊的應用前景和市場價值[1]。
1 P2P技術
1.1 P2P技術介紹
P2P技術,也被稱為對等網(wǎng)絡(peer-to-peer)技術[2],簡單地說,就是一種網(wǎng)絡用戶之間不經(jīng)過中繼設備而直接進行相互數(shù)據(jù)交換或服務的技術。這種新的技術將傳統(tǒng)的互聯(lián)網(wǎng)以“內(nèi)容位于中心”模式改變?yōu)椤皟?nèi)容位于邊緣”模式,相比以往的網(wǎng)絡模式有較大突破,實現(xiàn)了在網(wǎng)絡系統(tǒng)中每個結(jié)點用戶的地位和功能對等,并將網(wǎng)絡資源和服務權(quán)利交還給用戶,在這種系統(tǒng)架構(gòu)下,由于每個節(jié)點的地位和功能都對等,同時具備服務器和客戶端的雙重特性,因此可以同時作為服務使用者和服務提供者。P2P構(gòu)架網(wǎng)絡模式示意圖如圖1所示。
圖1 P2P構(gòu)架網(wǎng)絡模式示意圖
從P2P的網(wǎng)絡連接結(jié)構(gòu)圖可以看出,P2P網(wǎng)絡在結(jié)構(gòu)上呈現(xiàn)為一種分布式網(wǎng)絡結(jié)構(gòu),各個用戶之間相互建立連接和對話機制,可以資源共享和相互通信,這些硬件資源包括網(wǎng)絡核心處理能力、系統(tǒng)存儲能力、打印機等有效資源,這些共享網(wǎng)絡資源通過系統(tǒng)提供的服務和內(nèi)容,能夠被該網(wǎng)絡內(nèi)的其他用戶直接訪問。系統(tǒng)中的所有用戶既作為資源提供者,又是資源獲取者。通過P2P技術構(gòu)建的網(wǎng)絡,使人們在網(wǎng)絡上的溝通、信息交流變得更加容易和即時,更利于直接共享和交互,各節(jié)點用戶通過直接連接到網(wǎng)絡內(nèi)其他用戶的計算機進行共享文件信息的交換,這種便捷使得互聯(lián)網(wǎng)信息共享更為便捷、即時、安全可靠。
1.2 P2P技術的特點
P2P技術相比C/S模式具有很大的優(yōu)越性,其特點主要體現(xiàn)在以下幾個方面[3]:
1) 網(wǎng)絡非中心化結(jié)構(gòu):基于P2P技術構(gòu)建的網(wǎng)絡,系統(tǒng)共享資源和各種網(wǎng)絡服務分散在網(wǎng)絡系統(tǒng)的各個用戶結(jié)點上,用戶之間相互通信和網(wǎng)絡服務的實現(xiàn)都可直接進行,不需要服務器的介入和通過其他中間環(huán)節(jié),這就避免了可能引起的網(wǎng)絡瓶頸問題,風險大大減小。
2) 具有良好的可擴展性:隨著互聯(lián)網(wǎng)的不斷發(fā)展,網(wǎng)絡用戶也隨之大量增加,人們對于服務的需求也就增加了,P2P網(wǎng)絡始終能夠根據(jù)需求較快地響應并滿足網(wǎng)絡用戶的需要,同步地進行網(wǎng)絡系統(tǒng)整體的資源和服務能力的擴充,體現(xiàn)了P2P網(wǎng)絡具有良好的可擴展性。
3) 具有較高性價比:對于網(wǎng)絡用戶來說,整體網(wǎng)絡性能優(yōu)勢是被廣泛關注并看重的一個重要原因。P2P網(wǎng)絡能夠整合該系統(tǒng)中其他閑置普通節(jié)點,把大量的網(wǎng)絡服務、資料存儲和計算等任務分布到各個節(jié)點上,從而達到有效利用閑置各節(jié)點的計算能力和存儲空間,實現(xiàn)海量存儲和高性能計算的目的,提高網(wǎng)絡性能。
4) 較強的網(wǎng)絡健壯性:由于P2P結(jié)構(gòu)網(wǎng)絡提供的服務和內(nèi)容不是集中與中心服務器之間進行,而是分散在各個結(jié)點用戶之間進行,當部分網(wǎng)絡用戶結(jié)點遭到攻擊、結(jié)點斷開或失效時,P2P網(wǎng)絡及時根據(jù)需要自動調(diào)整網(wǎng)絡整體拓撲結(jié)構(gòu)。P2P構(gòu)架網(wǎng)絡的建立方式也和其他網(wǎng)絡有所不同,用戶自發(fā)地根據(jù)網(wǎng)絡加入和組網(wǎng)機制并以自組織的方式建立起來的,各個節(jié)點的加入和離開比較靈活自由,網(wǎng)絡能夠按照系統(tǒng)參數(shù)變化情況不斷地做自適應式的調(diào)整,優(yōu)化網(wǎng)絡資源。P2P架構(gòu)網(wǎng)絡具有耐攻擊、高容錯等優(yōu)點,使其更加健壯穩(wěn)定。
5) 實現(xiàn)整個網(wǎng)絡負載均衡: 基于P2P網(wǎng)絡構(gòu)建環(huán)境下,系統(tǒng)中的所有節(jié)點用戶既充當了資源的提供者—服務器,又作為網(wǎng)絡中的一個獨立個體—客戶端,這種結(jié)構(gòu)對服務器的存儲需求和計算能力大大減少了,同時網(wǎng)絡資源不是集中在中心服務器,而是分布在多個用戶節(jié)點上,使得整個網(wǎng)絡的負載均衡得以更好的實現(xiàn)。
1.3 P2P的拓撲結(jié)構(gòu)
根據(jù)拓撲結(jié)構(gòu)的特點可以將P2P結(jié)構(gòu)分為4種形式拓撲結(jié)構(gòu):集中式拓撲、完全分布式非結(jié)構(gòu)化拓撲、完全分布式結(jié)構(gòu)化拓撲和混合式拓撲。四種拓撲結(jié)構(gòu)的性能比較如表1所示。
2 P2P通信系統(tǒng)的體系結(jié)構(gòu)設計
2.1 網(wǎng)絡拓撲結(jié)構(gòu)的設計
按照P2P網(wǎng)絡系統(tǒng)組網(wǎng)特點,需要構(gòu)造一個擴展性能良好、可靠性高、維護方便的拓撲結(jié)構(gòu)。本設計采用基于中心服務器的P2P拓撲結(jié)構(gòu),也稱為集中式拓撲結(jié)構(gòu),因為對一個即時的通信系統(tǒng)來說,這種拓撲結(jié)構(gòu)可以很方便的管理用戶節(jié)點,縮短了查找用戶節(jié)點的時間,更能達到即時通信的目的,它的網(wǎng)絡結(jié)構(gòu)示意圖如圖2所示。
在該系統(tǒng)中服務器的作用就是維護用戶列表,用戶注冊登錄以后,會把所有在線用戶的一些信息包括用戶的ID,用戶名,用戶IP,端口等搜集統(tǒng)一匯總進行維護??蛻舳艘矔ㄟ^一個數(shù)據(jù)顯示結(jié)構(gòu)把所有服務器發(fā)送過來的用戶信息保存起來,并在客戶端的界面上顯示出在線用戶。同時,客戶端可以直接雙擊其他用戶的圖標與之建立連接,進行即時對話通信和數(shù)據(jù)交互。當有用戶動態(tài)加入或者是退出時,會先將消息發(fā)送給中心服務器,然后服務器再把這些消息發(fā)送給其他的在線用戶,其他的用戶會根據(jù)消息的不同采取不同的操作,既將該用戶信息加入或是刪除。
2.2 總體架構(gòu)設計
根據(jù)該系統(tǒng)所采用的拓撲結(jié)構(gòu)設計總體架構(gòu)如圖3所示。
在該系統(tǒng)中無論是服務器端還是客戶端都同時存在兩個Socket,即ClientSocket與ServerSocket。在剛啟動客戶端程序時,客戶端的ClientSocket會與服務器端的ServerSocket相連接,此時用戶要完成的任務是注冊新用戶或者是登錄系統(tǒng),一旦注冊成功,服務器端會返回一個新的用戶ID,并且服務器會將新用戶信息添加到數(shù)據(jù)庫??蛻舳说玫絀D后即可有權(quán)限進行登錄操作,用戶登錄成功后,服務器就會將所有在線的用戶信息發(fā)送到客戶端。然后,服務器會將該用戶的信息發(fā)送給其他的在線用戶,此時需要考慮一種極端的情況就是所有用戶的ClientSocket都與服務器端的相連接,那么服務器端就會通過ServerSocket將新登錄的用戶信息發(fā)送給其他在線的所有用戶;否則,服務器端就會通過ClientSocket發(fā)送。
客戶端將接收到的所有的用戶信息存儲起來,并在客戶端程序的界面上顯示出來相關信息,雙擊任一在線用戶,即刻會彈出與之交流的對話框。也就是主叫客戶端的ClientSocket與被叫客戶端的ServerSocket相連接成功,兩者之間就可以進行即時通信交流。
當客戶端退出時,客戶端的ClientSocket會重新與服務器端的ServerSocket相連接,然后向服務器發(fā)送退出消息,服務器接收到退出消息時會利用服務器端的ClientSocket與每個服務端的其他在線用戶的ServerSocket相連接,然后向他們發(fā)出該用戶退出的消息,其他在線用戶接收到退出消息后會處理這一消息,也即是將該用戶的信息從存儲數(shù)據(jù)中刪除。
3 客戶端軟件界面設計
3.1 客戶端界面設計
此通訊軟件的登錄窗口與一般使用的騰訊QQ、飛信等界面較為相似,最上端為“用戶登錄”字樣和圖片,然后是賬號和密碼輸入框,正確輸入帳號和密碼,點擊登錄按鈕即可登錄;初次使用需點擊“帳號申請”并按要求填寫相關的信息申請一個新的帳號。在登錄的同時還可選擇“記住密碼”和“自動登錄”選項,那樣在登錄以后系統(tǒng)就會把這些信息寫進系統(tǒng)的配置文件中,下次重新登錄時就會自動登錄或者是不用輸入帳號和密碼。當點擊界面上的“設置服務器”選項時,可以設置連接指定的服務器和端口。客戶端登錄界面如圖4所示。
3.2 注冊界面設計
申請賬戶窗口為注冊界面,初次使用的客戶在這里設置個人登陸賬戶的昵稱和個人登陸密碼,選擇用戶性別,點擊“提交”按鈕成功后,就完成了注冊的操作。注冊成功后,登錄窗口的帳號內(nèi)容就是注冊時返回的用戶ID,密碼就是注冊該ID時輸入的密碼。
3.3 通信界面設計
用戶登錄成功以后,會顯示自己的用戶名、用戶ID、在線狀態(tài),以及好友列表。好友列表里會顯示所有在線用戶的姓名,欲與之進行通信,雙擊即會彈出交談窗口。在通信窗口內(nèi)輸入你要發(fā)送的信息就可以一點擊“發(fā)送”按鈕進行發(fā)送信息進行即時通信,如果你要加入魔法表情,點擊選擇展開窗口內(nèi)不同表情按鈕即可,對方在收到消息前會顯示魔法表情。該窗體顯示接收到的消息,點擊“回復”按鈕,會顯示回復信息窗口。
除了以上一些客戶端的主要窗口外,還有一些簡單界面設置窗口,可以選擇設置系統(tǒng)是否要開機自動運行、是否取消自動登錄以及調(diào)節(jié)窗口的透明度等等。
4 客戶端SOCKET程序設計
客戶端是實現(xiàn)P2P通信的載體,客戶端之間的通信就是靠主叫端ClientSocket與被叫端的ServerSocket相連接實現(xiàn)的,同一個客戶端的ClientSocket和ServerSocket的作用也會不同??蛻舳说腃lientSocket主要負責系統(tǒng)啟動時的注冊、登錄,還有負責主動與其他客戶端交流以及退出系統(tǒng)的作用;而客戶端的ServerSocket的作用則是負責接收服務器發(fā)送而來的其他在線用戶信息和其他客戶端的主叫信息;所以一個客戶端的ClientSocket和ServerSocket的處理函數(shù)也會不同。在進行程序設計時,ClientSocket的消息處理函數(shù)與ServerSocket的消息處理函數(shù)會有一些相同的地方,這些相同的地方就是用于用戶之間通信交流的。
5 總結(jié)
本系統(tǒng)是基于P2P技術設計出一款弱化服務器的即時通信系統(tǒng)。傳統(tǒng)的C/S通信模式對服務器的依賴較強,一旦服務器遭受了攻擊而癱瘓,導致整個系統(tǒng)受到嚴重影響,即使系統(tǒng)有多個服務器工作,那么此時其他服務器的負載也會相應增加;且隨著用戶的大量增加,系統(tǒng)的服務器的數(shù)量也會增加,從而大大增加了整個系統(tǒng)運行成本[4]。該設計實現(xiàn)了一些簡單的P2P的底層實現(xiàn)機制和即時通信系統(tǒng)的基本功能,弱化中心服務器承載的作用,使用戶之間的實現(xiàn)直接通信而不需要服務器的中轉(zhuǎn),從而使服務器的承載量大大減少,只是保證用戶列表的正常有序維護。不僅對于整個系統(tǒng)的服務器數(shù)量需求大大減少,降低了成本,而且整個網(wǎng)絡的安全穩(wěn)定性大大提高了。
參考文獻:
[1] 雷蕾.P2P環(huán)境下即時通信軟件的設計[J].徐州工程學院學報:自然科學版, 2010( 2) .
[2] 李振汕.基于P2P的即時通信系統(tǒng)的設計[J].計算機與現(xiàn)代化,2011(7).
[3] 李京文,高燕,張在騰.論P2P技術的研究現(xiàn)狀[J].電腦知識與技術:學術交流,2007(9).
[4] 張春紅,裘曉峰.P2P 技術全面解析[M].北京:人民郵電出版社,2010: 191-197.