摘要:JXTA技術主要用于提供P2P系統所需的基礎服務。該文分析了JXTA技術的體系結構和核心協議,利用JXTA技術和Java語言設計和實現了一個電子白板系統。論文對電子白板系統進行了研究與探討,介紹了圖形對象的繪制、傳輸、和遠程恢復過程中的關鍵方法,從而實現了電子白板中圖形的共享。
關鍵詞:JXTA;P2P;電子白板;消息;管道
中圖分類號:TP311 文獻標識碼:A文章編號:1009-3044(2009)32-9257-03
Design and Implement of WhiteBoard System Based on JXTA
HUANG Li-ping
(Huaian College of Information Technology, Huai'an 223003, China)
Abstract: JXTA technology is used to provide an infrastructure service for P2P application system. The system structure and core protocol of JXTA technology are analyzed,A WhiteBoard system is designed and achieved by using of JXTA technology and Java language. This paper Researches and explores the whiteboard system, introduces the key methods of drawing、transmission and recovery of the graphic objects, achieving a shared whiteboard system.
Key words: JXTA; P2P; whiteboard; message; pipe
隨著社會的不斷發展和進步,對個體之間的協作程度的要求越來越高。電子白板是以計算機支持的協同工作為基礎,在多成員間實現信息實時交流與共享的網絡交流系統。分布在各地的成員都能看到電子白板中的內容,從而實現互動。
P2P網絡研究的廣泛開展和大量成果出現,使對等網絡(P2P)技術在實際應用中已經越來越被重視。同時,由于JXTA提供了P2P應用的核心模塊,并成為P2P網絡的一個開放的標準,因此利用JXTA平臺,采用P2P技術來開發一個電子白板在技術上是可行的。本文主要探討在對共享圖形對象進行傳輸時的消息處理和建立管道來進行消息的傳輸。
1 JXTA概述
JXTA是由SUN公司推出的一組開放的通用P2P協議,它為開發P2P應用程序提供了一整套開放協議和開源實現。對P2P節點的共同行為做了標準化。
1.1 JXTA應用程序的體系結構
JXTA應用程序的體系結構從下至上分為三個層次,分別為核心層、服務層和應用層。
核心層(JXTA Core)封裝了P2P網絡的一些最基礎的要素,包括為P2P應用程序提供關鍵機制的模塊。這些關鍵機制包括發現、傳輸、節點加入、創建組還有相關的安全原語。在理想的情況下,該層由所有的P2P設備共享,使得它們具有協同工作的能力。
服務層(Services)包含一些網絡服務。這些服務可能并不是P2P網絡所必不可少的,但卻非常有用。這些服務包括搜索和索引、目錄、存儲系統、文件共享、分布式文件系統、資源聚合和租借、協議轉換、驗證以及PKI服務等。
應用層(Applications)包括一些應用的實現,比如P2P即時消息、文件和資源共享、娛樂內容管理和轉發、P2P電子郵件系統、分布式驗證系統等。服務層和應用層之間并沒有嚴格的界限,一個客戶的應用可能是另一個客戶的服務。
1.2 JXTA協議
JXTA協議是JXTA技術的核心。JXTA通過定義一系列協議來進行對等體之間的交流通信。對等體通過協議可以發布自己的通告來廣播自己的資源,還可以在對等網絡中發現其他的對等體,并且發現網絡資源,以及路由消息等。
當前的JXTA定義了六種協議,如圖1所示。一類是核心協議,包括對等點解析協議和端點路由協議,這兩個協議是所有JXTA應用都必須實現的協議,它為JXTA應用提供了通信基礎。其他四種協議是標準服務協議,標準服務協議可以根據需要任意選擇,它為JXTA應用開發打下了良好的基礎。
2 電子白板的設計與實現
基于JXTA的電子白板主要包括本地圖形的繪制、圖形的傳輸以及遠程圖形的恢復三個部分。
2.1 本地圖形的繪制
在程序設計過程中,首先定義一個抽象類ShapeObj做為基類,在其中定義了抽象方法draw()、draw(Point start, Point end)、fill(Color fillColor)、SelectShape(Point pt)和move(Point pt, Point pt2)。draw()和draw(Point start, Point end)方法用于實現具體的繪圖功能,fill(Color fillColor)方法用于設置圖形的填充顏色,SelectShape(Point pt)方法用于定義圖形被選擇時的操作,move(Point pt,Point pt2)方法用于定義圖形移動時的操作。每一種圖形元素都對應的定義一個類,在各個派生類中對ShapeObj類中的抽象方法提供方法定義。電子白板的界面圖如圖2所示。
2.2 圖形的傳輸
用戶在電子白板上進行任何操作時,其結果都會傳輸給工作組的其他用戶,并同步顯示在其他用戶的電子白板上。傳輸過程中被傳送的是不同類型的消息。在創建各種類型的消息時,必須先對圖形對象序列化,然后再把它添加到消息中,通過管道發送給其他用戶。
2.2.1 消息的格式
系統中使用了很多種不同的消息,各種類型的消息并不完全一樣,有一些相同的域,有些則不一樣。為了減少傳輸的數據量,沒有使用統一的消息格式。下面是每種類型的消息都具有的公共域:
不同類型的消息特有的域如下:
繪制圖形消息(shapeMessage):
刪除圖形消息(removeMessage):
選擇圖形消息(lockMessage):
清空圖形消息(clearMessage):
clearMessage清除白板上的所有圖形,沒有設置特有的域。
2.2.2 消息的形成
在生成消息的過程中,首先生成消息的公共域,接著根據不同的消息類型,生成各類消息的數據域。在生成消息公共域的過程中,首先構造一個Message對象msg,然后調用Message類的addMessageElement()方法向msg中添加各個消息元素。其中StringMessageElement構造一個元素數據為字符串的消息元素。其中關鍵代碼如下:
//構造一個Message類的對象
Message msg = new Message();
//添加消息元素version
msg.addMessageElement(WhiteboardProtocol.nameSpace,
new StringMessageElement(versionTag,version, 1));
2.2.3 管道的建立
JXTA對等點之間使用管道來發送消息。管道對所傳送的數據沒有限制,它支持所有對象的傳送。在建立管道的過程中,首先用PeerGroup類的getPipeService()方法來獲取管道服務的實例,管道服務用于創建輸入和輸出管道。然后用createInputPipe()方法來創建帶有偵聽器的隱蔽輸入管道,輸入管道最初是未連接的。用createOutputPipe()創建隱蔽輸出管道,返回的OutputPipe對象將向具有等價輸入管道的任何點發送消息。創建管道的主要代碼如下所示:
//構建管道通告
PipeAdvertisement pipeAdvt =
(PipeAdvertisement) AdvertisementFactory.
newAdvertisement(PipeAdvertisement.getAdvertisementType());
//用createPipeID()方法生成管道ID
PipeID pid = createPipeID(pg.getPeerGroupID(), name, 1);
//設置管道ID、名稱和類型
pipeAdvt.setPipeID(pid);
pipeAdvt.setName(name);
pipeAdvt.setType(\"JxtaPropagate\");
//在本地和遠程發布管道通告
pg.getDiscoveryService(). publish(pipeAdvt);
pg.getDiscoveryService().remotePublish(pipeAdvt);
//創建輸入管道和輸出管道
outputPipe=pg.getPipeService().createOutputPipe(pipeAdvt,2000L);
inputPipe=pg.getPipeService().createInputPipe(pipeAdvt,listener);
2.2.4 消息的傳輸
在啟動電子白板模塊的時候,每個對等點根據對等組ID構建一個管道通告,然后在JXTA網絡中發布自己的管道通告,并根據管道通告建立輸入管道和輸出管道。在電子白板系統中一個用戶向對等組中的其他所有用戶發布消息。在激發相應的鼠標事件時,根據用戶的不同操作進行消息編碼,形成不同類型的消息,并通過調用輸出管道的send()方法將消息發送出去。輸入管道一直監聽是否有消息到達,一旦它發現有消息到達,將從管道中抽取出消息數據,消息解碼過程將消息中的數據提取出來,并根據所提取的數據更新白板。利用管道進行圖形數據傳輸的大概過程如圖3所示。
2.3 遠程圖形的恢復
遠程圖形恢復就是在接收到消息后進行圖形的重新繪制。它通過分析管道消息來重新繪制圖形,整個過程不需要用戶干預。
當消息到達輸入管道以后,通過對消息的解碼,得到消息的各個元素。根據消息的不同類型,執行不同的操作。如果消息類型是shapeMessage,將圖形信息反序列化后存入Vector容器中,然后更新白板;如果消息類型是clearMessage,將Vector容器清空后更新白板;如果消息類型是removeMessage,將移除Vector容器中編號為key的圖形,然后更新白板;如果消息類型為lockMessage,則鎖定Vector容器中編號為key的圖形。
3 結束語
該文在分析了JXTA的體系結構及核心協議后,研究設計了基于JXTA的電子白板系統。對系統的各個功能模塊進行了詳細設計。側重分析了在圖形對象傳輸過程中管道的建立、消息的創建和圖形對象的傳輸。采用P2P技術實現了多點之間的交流,減輕了服務器的負擔,并且實現了多人的協同操作,具有很強的互動性。在進一步的工作中,還可以增加對多媒體信息的處理,滿足用戶對聲音、視頻交流的需要,以設計出功能更加完善的電子白板系統。
參考文獻:
[1] 楊天路.P2P網絡技術原理與系統開發案例[M].北京:人民郵電出版社,2007:143-175.
[2] Oaks S,Traversat B,Li Gong等著.JXTA技術手冊[M].技橋,譯.北京:清華大學出版社,2004:16-48.
[3] 許斌.JXTA-Java P2P網絡編程技術[M].北京:清華大學出版社,2003:45-70.
[4] 沈洪敏.基于JXTA的P2P程序設計的研究[D].成都:四川大學,2006.
[5] 陶瑜.基于JXTA的P2P網上拍賣系統的設計[J].電腦知識與技術,2008(12).
[6] JXTA-Download[EB/OL].[2009-09-10].http://download.java.net/jxta/.