本發(fā)明屬于教育信息化技術(shù)領(lǐng)域,具體涉及一種PPT共享方法及實現(xiàn)該方法的教師端和學(xué)生端。
背景技術(shù):
教育信息化的發(fā)展依托于教學(xué)平臺和教學(xué)方式的發(fā)展,教學(xué)平臺為老師和學(xué)生們提供線上授課和學(xué)習(xí)的環(huán)境,為處于不同地方的老師和學(xué)生在同一個網(wǎng)絡(luò)課堂上學(xué)習(xí),使得異地教學(xué)成為了可能。教學(xué)方式則是通過信息化技術(shù),克服地理位置上的隔離,能給師生們帶來互動的教學(xué)體驗。除了在教學(xué)過程中教師音頻的傳輸以外,教學(xué)過程中的多媒體教學(xué)課件如何高效地在網(wǎng)絡(luò)中同步傳輸播放也是一個重要的問題。
現(xiàn)在大多數(shù)的網(wǎng)絡(luò)PPT教學(xué),采用比較多的一種方式是學(xué)生們自主觀看PPT,即學(xué)生上課前提前將老師的PPT下載到本地,上課時自主瀏覽,這樣造成了學(xué)生有時跟不上老師的進度從而保證教學(xué)質(zhì)量。采用比較多的另一種方式是錄屏方式,即在教師授課時,對教師當(dāng)前的操作屏幕進行錄制,采用視頻的方式傳輸給學(xué)生端,雖然這種方式解決了教師和學(xué)生間實時性的問題,但是由于是實時視頻,存在無法對視頻進行查看操作,即學(xué)生無法將課件進行快進或后退瀏覽。
技術(shù)實現(xiàn)要素:
針對現(xiàn)有技術(shù)的以上缺陷或改進需求,本發(fā)明提供了一種PPT共享方法,其目的在于,學(xué)生上課前無需提前將老師的PPT下載到本地,授課過程中既能保證教師端播放與學(xué)生端讀取的同步性,又能實現(xiàn)學(xué)生端自主瀏覽課件,使教師和學(xué)生之間擁有更好的教學(xué)交互體驗。
一種PPT共享方法,其特征在于,包括PPT遠(yuǎn)程同步播放和PPT本地 自主瀏覽兩部分;
所述PPT遠(yuǎn)程同步播放的具體實現(xiàn)過程為:
(S1)教師端預(yù)先將PPT課件分為多個文件塊;
(S2)教師端調(diào)用本地播放器播放文件塊,播放的同時捕獲并封裝操作指令,將當(dāng)前播放的文件塊和封裝后的操作指令主動推送給學(xué)生端;
(S3)學(xué)生端緩存收到的文件塊,解析操作指令,調(diào)用本地播放器播放當(dāng)前緩存的數(shù)據(jù)塊和響應(yīng)操作指令;
所述PPT本地自主瀏覽步驟的具體實現(xiàn)過程為:
(T1)請求學(xué)生端預(yù)先建立本地虛擬磁盤,將教師端的文件塊目錄映射到本地虛擬磁盤;
(T2)請求學(xué)生端截取用戶在本地虛擬磁盤訪問預(yù)瀏覽文件塊目錄的操作,根據(jù)截取的訪問操作計算預(yù)瀏覽文件塊信息,查詢預(yù)瀏覽文件塊是否已在學(xué)生端本地緩存,若預(yù)瀏覽文件塊已載入學(xué)生端本地緩存,則直接調(diào)用本地播放器播放預(yù)瀏覽文件,否則進入步驟(T3);
(T3)請求學(xué)生端生成包含預(yù)瀏覽文件塊信息的訪問請求指令發(fā)送給教師端;
(T4)教師端解析訪問請求指令獲得預(yù)瀏覽文件塊信息,查詢是否已有學(xué)生端緩存該預(yù)瀏覽文件塊,若查詢到,則將該學(xué)生端信息反饋給請求學(xué)生端,若沒有查詢到,則將請求的預(yù)瀏覽文件塊直接發(fā)送給請求學(xué)生端;
(T5)請求學(xué)生端向教師端反饋的學(xué)生端發(fā)出訪問請求,被請求訪問的學(xué)生端將緩存的預(yù)瀏覽文件塊傳送給請求學(xué)生端,學(xué)生端緩存預(yù)瀏覽文件塊并調(diào)用本地播放器播放預(yù)瀏覽文件塊。
進一步地,在所述PPT遠(yuǎn)程同步播放的具體實現(xiàn)過程中,學(xué)生端與教師端構(gòu)成樹狀拓?fù)渚W(wǎng)絡(luò),以教師端作為根節(jié)點,教師端主動推送的文件塊按照樹狀網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)由根節(jié)點向葉子節(jié)點層層傳輸分發(fā)。
進一步地,所述文件塊采用流式傳輸,所述操作指令采用XML格式封 裝。
進一步地,所述教師端存有文件塊檢索信息表,用于記錄文件塊ID和緩存有該文件塊的學(xué)生端位置信息;所述文件塊ID由PPT課件文件名和文件塊檢索號構(gòu)成;所述教師端在將文件塊發(fā)送給學(xué)生端的同時,更新文件數(shù)據(jù)塊檢索信息表;所述學(xué)生端從本地緩存刪除文件塊的同時,告知教師端更新文件塊檢索信息表。
進一步地,所述步驟(T4)若查詢到已有學(xué)生端緩存該預(yù)瀏覽文件塊,則從查詢到的學(xué)生端中選取離請求學(xué)生端最近者反饋給請求學(xué)生端。
一種實現(xiàn)PPT共享的教師端,包括教師端文件應(yīng)用模塊、教師端文件透明操作模塊、教師端文件共享傳輸模塊;
所述教師端文件應(yīng)用模塊,用于調(diào)用本地播放器播放,播放的同時捕獲并封裝操作指令;
所述教師端文件透明操作模塊,用于將當(dāng)前播放的文件塊和封裝后的操作指令推送給學(xué)生端;還用于調(diào)用教師端文件共享傳輸模塊以響應(yīng)學(xué)生端的訪問請求;
所述教師端文件共享傳輸模塊包括:
教師端網(wǎng)絡(luò)拓?fù)湫畔⒐芾碜幽K,用于負(fù)責(zé)管理網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu);
教師端協(xié)作通信子模塊,用于教師端與學(xué)生端之間的通信;
教師端文件分塊處理子模塊,用于預(yù)先將PPT課件分為多個文件塊;
教師端文件塊管理子模塊,用于解析訪問請求指令獲得預(yù)瀏覽文件塊信息,查詢是否已有學(xué)生端緩存預(yù)瀏覽文件塊,若查詢到,則將該學(xué)生端信息反饋給請求學(xué)生端,若沒有查詢到,則將請求的預(yù)瀏覽文件塊直接發(fā)送給請求學(xué)生端。
進一步地,所述教師端文件塊管理子模塊存有文件塊檢索信息表,用于記錄文件塊ID和緩存有該文件塊的學(xué)生端位置信息;所述文件塊ID由 PPT課件文件名和文件塊檢索號構(gòu)成;所述教師端在將文件塊發(fā)送給學(xué)生端的同時,更新文件數(shù)據(jù)塊檢索信息表;所述學(xué)生端從本地緩存刪除文件塊的同時,告知教師端更新文件塊檢索信息表。
進一步地,所述教師端文件塊管理子模塊查詢到已有學(xué)生端緩存該預(yù)瀏覽文件塊,則從查詢到的學(xué)生端中選取離請求學(xué)生端最近者反饋給請求學(xué)生端。
一種實現(xiàn)PPT共享的學(xué)生端,PPT課件分為多個文件塊,包括學(xué)生端文件應(yīng)用模塊、學(xué)生端文件透明操作模塊和學(xué)生端文件共享及緩存模塊;
所述學(xué)生端文件應(yīng)用模塊,用于調(diào)用本地播放器播放PPT文件塊以及響應(yīng)教師端的PPT操作;
所述學(xué)生端文件透明操作模塊,用于將教師端主動推送的文件塊提供給學(xué)生端文件應(yīng)用模塊同步播放,解析教師端推送的文件塊操作指令并提供給學(xué)生端文件應(yīng)用模塊同步響應(yīng)操作指令;還用于預(yù)先建立本地虛擬磁盤,將教師端的文件塊目錄映射到本地虛擬磁盤;截取用戶在本地虛擬磁盤訪問預(yù)瀏覽文件塊目錄的操作,調(diào)用學(xué)生端文件共享及緩存模塊以獲取預(yù)瀏覽文件塊,提供所述學(xué)生端文件應(yīng)用模塊播放;
所述學(xué)生端文件共享及緩存模塊包括
學(xué)生端文件塊請求訪問子模塊,用于根據(jù)預(yù)瀏覽文件塊目錄的訪問操作計算預(yù)瀏覽文件塊信息,查詢預(yù)瀏覽文件塊是否已在學(xué)生端本地緩存,若是,則將該文件塊反饋給上層透明操作模塊,若不存在,則生成包含預(yù)瀏覽文件塊的訪問請求指令傳送給教師端;
學(xué)生端文件塊緩存管理子模塊,用于緩存教師端主動推送的PPT文件塊和學(xué)生端請求的文件塊;
學(xué)生端文件塊轉(zhuǎn)發(fā)子模塊,用于從本地緩存中的文件塊轉(zhuǎn)發(fā)給其他學(xué)生端;
學(xué)生端協(xié)作通信子模塊,用于與教師端以及其他學(xué)生端之間的通 信。
進一步地,所述學(xué)生端與教師端構(gòu)成樹狀拓?fù)渚W(wǎng)絡(luò),以教師端作為根節(jié)點,教師端主動推送的文件塊按照樹狀網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)由根節(jié)點向葉子節(jié)點層層傳輸分發(fā)。
總體而言,通過本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,本發(fā)明可實現(xiàn)在線授課過程中教師在本地控制播放自己的多媒體課件,學(xué)生端實時地遠(yuǎn)程讀取文件數(shù)據(jù)并同步播放課件。學(xué)生端應(yīng)用程序不通過提前下載的方式獲取文件,而是在授課過程中透明地訪問遠(yuǎn)程教師端分享出來的文件數(shù)據(jù)。在該模型中,教師端服務(wù)器是文件數(shù)據(jù)原始提供者,并向節(jié)點提供文件數(shù)據(jù)塊檢索和維護整個拓?fù)渚W(wǎng)絡(luò)。學(xué)生端從網(wǎng)絡(luò)中獲得文件數(shù)據(jù)并提供給用戶應(yīng)用程序使用,同時在本地緩存數(shù)據(jù),用于向其他節(jié)點轉(zhuǎn)發(fā)。
附圖說明
圖1為本發(fā)明系統(tǒng)整體架構(gòu)示意圖;
圖2為本發(fā)明文件分塊示意圖;
圖3為本發(fā)明學(xué)生端對操作指令參數(shù)的XML信息解析流程圖;
圖4為本發(fā)明教師端與學(xué)生端文件目錄映射關(guān)系示意圖;
圖5為本發(fā)明虛擬磁盤驅(qū)動原理示意;
圖6為本發(fā)明教師端結(jié)構(gòu)圖;
圖7(a)為學(xué)生端節(jié)點加入消息示意圖,圖7(b)為學(xué)生端節(jié)點退出消息示意圖;
圖8為本發(fā)明B樹數(shù)據(jù)結(jié)構(gòu)圖;
圖9為本發(fā)明文件數(shù)據(jù)塊申請讀取的消息格式示意圖;
圖10為本發(fā)明學(xué)生端結(jié)構(gòu)圖;
圖11為本發(fā)明文件存儲的哈希表存儲結(jié)構(gòu)圖;
圖12為本發(fā)明文件數(shù)據(jù)塊封裝格式示意圖;
圖13為本發(fā)明后繼節(jié)點信息表示意圖;
圖14為本發(fā)明更新節(jié)點信息表的消息格式;
圖15是本發(fā)明節(jié)點協(xié)作通信模塊工作流程圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個實施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
圖1為本發(fā)明系統(tǒng)整體架構(gòu)示意圖,涉及一個教師端和多個學(xué)生端,本發(fā)明PPT共享方法包括教師端播放的PPT在學(xué)生端同步播放機制和學(xué)生端PPT本地自主瀏覽兩部分內(nèi)容。下面對兩部分內(nèi)容詳細(xì)說明。
一、PPT遠(yuǎn)程同步播放機制
本發(fā)明PPT同步播放機制是指:學(xué)生不需要在上課前提前下載PPT,老師在遠(yuǎn)程授課播放PPT以及對PPT進行操作(包括翻頁、重難點的注釋、動畫效果的播放等等),學(xué)生端邊讀取邊播放,老師的操作在學(xué)生端也會同時呈現(xiàn),即老師播放的PPT和學(xué)生觀看的PPT實時同步。
本發(fā)明PPT同步播放方法流程圖,具體為:
(1)教師端將課件資源分成多個文件塊。
課件資源按照文件塊的方式進行組織和管理,譬如PPT,可將一張PPT頁面作為一個文件塊,每一個文件塊獨立存儲。在整個資源共享網(wǎng)絡(luò)中,每個文件塊由課件文件名和文件塊檢索號來唯一確定。課件文件名顧名思義,是表示課件文件名的字符串,而文件塊檢索號則表示文件塊在課件文件中順序。每個課件都被系統(tǒng)按照預(yù)定FS_CHUNK_SIZE的固定大小進行了分割,文件塊檢索號則表示該文件塊在整個課件文件中所處的位置,文件塊依次被系統(tǒng)分配其文件塊檢索號。如圖2所示,課件文件被分為4個 文件塊,可能由于最后一個文件塊內(nèi)容小于FS_CHUNK_SIZE的大小,此時需要額外信息來說明具體文件片大小。
因此,在整個文件共享網(wǎng)絡(luò)中,每個文件數(shù)據(jù)塊與文件的名稱和文件塊檢索號所一一對應(yīng)。而課件文件名和文件塊檢索號一起作為文件塊的唯一標(biāo)識,稱為課件文件塊ID。在課件文件共享系統(tǒng)中,每個子節(jié)點都通過該課件文件塊ID來進行檢索具體的文件塊。
(2)教師端調(diào)用本地播放器播放文件塊,播放的同時捕獲并封裝操作指令,將當(dāng)前播放的文件塊和封裝后的操作指令推送給學(xué)生端。
教師端和學(xué)生端連接建立傳輸通道。當(dāng)教師對ppt進行操作時,教師端將操作指令及相應(yīng)參數(shù)封裝成XML進行傳輸,將ppt頁面采用流式傳輸?shù)姆绞竭M行推送。
文件在同步播放時,實時同步播放的操作指對應(yīng)的參數(shù)可能會因為播放的文件格式不同而有所不同。為了使得系統(tǒng)能兼容不同的文件同步交互控制參數(shù),這里優(yōu)選采用可視化文本格式,即XML(Extensible Markup Language)進行文件控制消息的封裝。操作命令消息采用星型架構(gòu)進行直接連接控制。XML是基于文本的消息格式,通過添加額外的字段使消息易于讀取,在可讀性和傳輸效率上做的一種折中,而且XML的解析已經(jīng)有很成熟的解決方案。最終基于XML來設(shè)計系統(tǒng)同步的消息格式。
這里以PowerPoint作為一個例子來描述消息的格式。
<?xml version="1.0"?>
<pptmsg>
<type>PowerPoint<類型>
<filename>123.pptx</文件名>
<slidecnt>11</slidecnt>
<slide>3</滑動>
<click>2</點擊>
<messageindex>1</messageindex>
</pptmsg>
(3)學(xué)生端緩存收到的文件塊,并解析操作指令,調(diào)用本地播放器播放當(dāng)前緩存的數(shù)據(jù)塊和響應(yīng)操作指令。
學(xué)生端采用緩存的方式對ppt頁面進行存儲,接收到的文件塊緩存在系統(tǒng)的內(nèi)存中。
請參見圖3,學(xué)生端對接收到的操作指令參數(shù)的XML信息進行解析,包含ppt的當(dāng)前頁面數(shù)、ppt的當(dāng)前操作指令(參數(shù))等等,將這些參數(shù)發(fā)送到本地的播放器,本地的播放器根據(jù)參數(shù)對本地的ppt進行同步操作。
二、學(xué)生端自主瀏覽
本地學(xué)生端可根據(jù)個人需要靈活地對已收到的課件資源進行靈活的播放和操作,實現(xiàn)自主瀏覽。
對已經(jīng)接收到的頁面,由于ppt文件該部分已經(jīng)緩存在本地,對這些頁面的查看可直接翻頁查看即可。
對未授課的頁面,本地學(xué)生端還可根據(jù)個人需要靈活地對未緩存的課件資源進行靈活的透明訪問,也就是說學(xué)生端可以完全透明地像讀取本地磁盤上的文件一樣去訪問讀取遠(yuǎn)程教師端的文件數(shù)據(jù)。按照前文所述的被動推送模式,學(xué)生端向教師端發(fā)送請求,請求的信息的中包括所需的頁面數(shù),教師端收到請求后,根據(jù)請求,發(fā)送相應(yīng)的頁面到學(xué)生端。
具體的實現(xiàn)過程為:
(1)請求學(xué)生端預(yù)先建立本地虛擬磁盤,將教師端的文件塊目錄映射到本地虛擬磁盤。
虛擬磁盤是一個用戶態(tài)的文件系統(tǒng)。通過調(diào)用外接接口函數(shù)將遠(yuǎn)程服務(wù)端指定的目錄映射到本地虛擬磁盤內(nèi)。圖4為本發(fā)明教師端與學(xué)生端文件目錄映射關(guān)系示意圖。虛擬磁盤內(nèi)的文件目錄實則是對遠(yuǎn)程服務(wù)端目錄的映射,用戶應(yīng)用程序?qū)μ摂M磁盤內(nèi)文件的每一次訪問實則是對遠(yuǎn)程服務(wù) 端目錄的訪問。虛擬磁盤并不是一個真實的磁盤,存在于內(nèi)存。虛擬磁盤將遠(yuǎn)程教師端的文件目錄映射到本地。在實際的應(yīng)用中,我們的虛擬磁盤文件系統(tǒng)提供列取文件目錄內(nèi)容,獲取文件信息。用戶應(yīng)用程序像讀取本地磁盤文件一樣。
(2)請求學(xué)生端截取用戶在本地虛擬磁盤訪問預(yù)瀏覽文件塊目錄的操作,根據(jù)截取的訪問操作計算預(yù)瀏覽文件塊信息,查詢預(yù)瀏覽文件塊是否已在學(xué)生端本地緩存,若預(yù)瀏覽文件塊已載入學(xué)生端本地緩存,則直接調(diào)用本地播放器播放預(yù)瀏覽文件,否則進入步驟(3)。
(3)請求學(xué)生端生成包含預(yù)瀏覽文件塊信息的訪問請求指令并發(fā)送給教師端。
(4)教師端解析訪問請求指令獲得預(yù)瀏覽文件塊信息,查詢是否已有學(xué)生端緩存該預(yù)瀏覽文件塊,若查詢到,則將該學(xué)生端信息反饋給請求學(xué)生端,若沒有查詢到,則將請求的預(yù)瀏覽文件塊直接發(fā)送給請求學(xué)生端。
本發(fā)明請求策略是:除了向教師端索要頁面外,還可以向臨近的已經(jīng)緩存有所需數(shù)據(jù)塊的學(xué)生端獲取該部分課件內(nèi)容。教師端對資源請求進行解析,查詢已經(jīng)緩存有該資源的節(jié)點,若查詢到,則將該節(jié)點的位置信息推薦給請求學(xué)生端,學(xué)生端立即向推薦學(xué)生端請求訪問PPT數(shù)據(jù)塊;若沒有查詢到,則直接將請求的PPT數(shù)據(jù)塊發(fā)送給學(xué)生端。
學(xué)生端在本地注冊dokan.sys驅(qū)動程序,實現(xiàn)了一種基于用戶態(tài)的文件系統(tǒng)。dokan庫以Windows系統(tǒng)驅(qū)動的方式Windows系統(tǒng)中進行注冊以后。學(xué)生端的用戶應(yīng)用程序?qū)μ摂M磁盤內(nèi)目錄進行讀文件,查詢文件目錄(ReadFile,WriteFile,GetFileInformation)等操作時,這些操作請求會被送到Windows內(nèi)核驅(qū)動運行。然后這些指令被繼續(xù)送往dokan的內(nèi)核態(tài)文件驅(qū)動中。Dokan收到指令請求以后調(diào)用響應(yīng)文件操作函數(shù),即對遠(yuǎn)程服務(wù)端的文件的訪問操作,文件操作的回調(diào)函數(shù)將函數(shù)的結(jié)果發(fā)送回提出請求的用戶應(yīng)用程序中,如圖5所示。
(5)請求學(xué)生端向教師端反饋的學(xué)生端發(fā)出訪問請求,被請求訪問的學(xué)生端將緩存的預(yù)瀏覽文件塊傳送給請求學(xué)生端,學(xué)生端緩存預(yù)瀏覽文件塊并調(diào)用本地播放器播放預(yù)瀏覽文件塊。
通過上述說明可知,本發(fā)明涉及的資源推送分為主動推送和被動推送,主動推送模式下:教師對ppt進行操作,系統(tǒng)主動將操作指令及ppt頁面進行推送;被動推送模式下,學(xué)生希望往后翻頁查看時,向教師端進行所需頁面請求,教師端根據(jù)需要進行推送,被動推送在后續(xù)的自主瀏覽中使用。
圖6為本發(fā)明教師端的一種實施方式,包括文件應(yīng)用模塊、文件透明操作模塊、文件共享傳輸模塊;文件共享傳輸模塊又包括:網(wǎng)絡(luò)拓?fù)湫畔⒐芾碜幽K、文件分塊處理子模塊、文件塊管理子模塊和協(xié)作通信子模塊。
(1)教師端文件應(yīng)用模塊
調(diào)用播放器播放和操作PPT,捕獲并封裝操作指令。
(2)教師端文件透明操作模塊
文件透明操作模塊將當(dāng)前播放的文件塊和封裝后的操作指令推送給學(xué)生端;
文件透明操作模塊還響應(yīng)學(xué)生端的資源請求,調(diào)用文件塊管理子模塊解析資源請求,查詢哪些學(xué)生端已經(jīng)緩存有請求資源,從中選取離請求節(jié)點最近的節(jié)點推薦給請求節(jié)點。最近的節(jié)點可能是學(xué)生端,也可能是教師端。
(3)教師端網(wǎng)絡(luò)拓?fù)湫畔⒐芾碜幽K
網(wǎng)絡(luò)拓?fù)湫畔⒐芾碜幽K負(fù)責(zé)管理網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。網(wǎng)絡(luò)中的所有節(jié)點構(gòu)成樹狀拓?fù)浣Y(jié)構(gòu),所述節(jié)點包括學(xué)生端和教師端,PPT文件塊按照網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)由根節(jié)點向葉子節(jié)點層層傳輸分發(fā)。
如果新的學(xué)生端節(jié)點加入網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)中,節(jié)點會向教師端節(jié)點發(fā)起請求,教師端節(jié)點收到請求后,將該學(xué)生端節(jié)點加入到樹狀網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)中。當(dāng)有學(xué)生端節(jié)點申請退出在線課堂,從網(wǎng)絡(luò)中將該節(jié)點去掉,然后重 新建立新的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。每當(dāng)因為學(xué)生節(jié)點的加入或者離開在線課堂,網(wǎng)絡(luò)拓?fù)湫畔⒐芾碜幽K都會通知受到影響的節(jié)點其新的后繼節(jié)點信息。
按照一種具體實施方式,文件共享網(wǎng)絡(luò)拓?fù)湫畔⒈淼臄?shù)據(jù)結(jié)構(gòu)采用一種自平衡的多路搜索樹,該數(shù)據(jù)結(jié)構(gòu)采用B樹的數(shù)據(jù)結(jié)構(gòu)來實現(xiàn),如圖7所示。B樹的定義以及基本操作屬于現(xiàn)有技術(shù),本文不在闡述。
B樹種每個節(jié)點包含多項,例如網(wǎng)絡(luò)中的根節(jié)點就包含0001和0002兩項,這里每一項表示課件轉(zhuǎn)發(fā)網(wǎng)絡(luò)中的一個學(xué)生端節(jié)點。B樹種每個節(jié)點都包含一個關(guān)鍵字,每個節(jié)點的關(guān)鍵字就是節(jié)點的IP地址。B樹通過這個關(guān)鍵字對每個節(jié)點進行排序,這樣可以使得IP地址較為接近的節(jié)點能分布在相近的網(wǎng)絡(luò)拓?fù)鋮^(qū)域。
在B樹構(gòu)成的課件共享轉(zhuǎn)發(fā)網(wǎng)絡(luò)中,每一個節(jié)點都負(fù)責(zé)對后繼的若干節(jié)點進行課件資源轉(zhuǎn)發(fā)。這種對應(yīng)的轉(zhuǎn)發(fā)關(guān)系是通過如下的機制來實現(xiàn)的。在B樹的結(jié)構(gòu)中,包含n項的節(jié)點后面對應(yīng)n+1個子節(jié)點。例如圖3-9中B樹第二層左1子節(jié)點包含有0003和0004兩項,該子節(jié)點后續(xù)有3個后繼子節(jié)點。則該子節(jié)點0003項負(fù)責(zé)左1子節(jié)點中的項,0004負(fù)責(zé)對應(yīng)左2子節(jié)點中的項,第n項對應(yīng)n和n+1子節(jié)點中的項。如圖所示,該子節(jié)點0003對應(yīng)的后繼節(jié)點為0010,0011和0012三項.而0004所對應(yīng)后繼節(jié)點是左2和和左3子節(jié)點中的項,其為0013,0014,0015,0016。
當(dāng)有新的學(xué)生在授課過程中加入在線課堂,則該學(xué)生端節(jié)點會加入課件共享傳輸網(wǎng)絡(luò)中,該學(xué)生節(jié)點會向教師端節(jié)點發(fā)送節(jié)點的加入或者離開消息,課件共享轉(zhuǎn)發(fā)網(wǎng)絡(luò)則會在網(wǎng)絡(luò)拓?fù)湫畔⒈砝锩嫦鄳?yīng)地增刪對應(yīng)的節(jié)點項。
學(xué)生端節(jié)點的加入消息如圖8(a)所示,學(xué)生端節(jié)點的退出消息如圖8(b)所示。
學(xué)生節(jié)點如果加入或者離開拓?fù)渚W(wǎng)絡(luò),則網(wǎng)絡(luò)拓?fù)湫畔⒈硗ㄟ^B樹的插入或者刪除的方式來增加或者刪除該學(xué)生節(jié)點。這里不再闡述B樹的插 入和刪除子節(jié)點的實現(xiàn)細(xì)節(jié)。同時,當(dāng)因為有學(xué)生節(jié)點的加入和離開課件共享轉(zhuǎn)發(fā)網(wǎng)絡(luò),對網(wǎng)絡(luò)的拓?fù)湫畔⒈戆l(fā)生變化,使得有些學(xué)生節(jié)點的后續(xù)節(jié)點列表發(fā)生改變。這時B樹的根節(jié)點(即教師端節(jié)點)會向涉及到變化的節(jié)點發(fā)送最新的其后繼節(jié)點信息列表。
(5)教師端文件分塊處理子模塊
文件分塊處理子模塊用于將PPT分為多個數(shù)據(jù)塊,一般一頁PPT為一個數(shù)據(jù)塊。每個文件數(shù)據(jù)塊與文件的名稱和文件塊檢索號一一對應(yīng)。而文件名和文件塊檢索號一起作為文件塊的唯一標(biāo)識,稱為課件文件塊ID。在課件文件共享系統(tǒng)中,每個子節(jié)點都通過該課件文件塊ID來進行檢索具體的文件塊。
(6)教師端文件塊管理子模塊
文件塊管理子模塊作為響應(yīng)資源請求的具體執(zhí)行者。當(dāng)有學(xué)生端需要訪問某課件文件塊時,向教師端發(fā)出請求;教師端作為文件檢索服務(wù)器來記載文件數(shù)據(jù)塊被緩存在網(wǎng)絡(luò)中的節(jié)點位置,服務(wù)器返回文件塊的存儲位置,請求節(jié)點即可從存有該資源的節(jié)點處獲取到文件塊。如果沒有節(jié)點存儲該文件,則學(xué)生端直接從教師端獲取文件塊。
文件塊管理子模塊存儲有文件數(shù)據(jù)塊檢索信息表,記載文件數(shù)據(jù)塊資源和緩存有該課件文件塊資源的學(xué)生節(jié)點位置信息。文件數(shù)據(jù)塊資源由文件數(shù)據(jù)塊ID來標(biāo)識,學(xué)生節(jié)點的位置信息則由IP地址和端口號來標(biāo)識。文件數(shù)據(jù)塊檢索目錄采用哈希表的方式來實現(xiàn),哈希表的鍵是文件數(shù)據(jù)塊ID,所映射的值為緩存有該文件數(shù)據(jù)塊的節(jié)點位置。采用哈希表的實現(xiàn)方式是因為在整個教學(xué)文件共享系統(tǒng)中,課件文件塊的數(shù)量可能很大。在實際教學(xué)中,為了保證課堂教學(xué)的實時性,對于課件文件塊的查詢反應(yīng)
文件塊管理子模塊收到學(xué)生端發(fā)出資源訪問請求后,對請求進行解析。圖9為文件數(shù)據(jù)塊申請讀取的消息格式示例,其中File_index指文件數(shù)據(jù)塊檢索號。
若該課件文件數(shù)據(jù)塊所對應(yīng)的表項存在,則從該文件數(shù)據(jù)塊對應(yīng)的存儲節(jié)點列表中選取一個最近的節(jié)點,將節(jié)點的IP地址和端口號信息發(fā)送給發(fā)起查詢請求的學(xué)生節(jié)點。當(dāng)該學(xué)生節(jié)點從提供的節(jié)點中成功獲取到課件文件數(shù)據(jù)塊資源后,學(xué)生節(jié)點會將該文件數(shù)據(jù)塊就放入本地的文件數(shù)據(jù)塊緩存中,同時發(fā)送該文件數(shù)據(jù)塊已被節(jié)點緩存的消息給教師端。教師端根據(jù)收到的消息更新其文件數(shù)據(jù)塊檢索目錄。
若檢索目錄中不存在存有該文件數(shù)據(jù)塊的學(xué)生節(jié)點,則學(xué)生節(jié)點從服務(wù)中心本地節(jié)點讀取課件文件數(shù)據(jù)塊。并且在學(xué)生節(jié)點成功讀取后,在本地進行緩存,通知教師端節(jié)點已添加該課件文件數(shù)據(jù)塊。教師端根據(jù)收到的消息更新其文件數(shù)據(jù)塊檢索目錄。
當(dāng)某個學(xué)生節(jié)點的文件數(shù)據(jù)塊緩存已滿時,則會按照先進先出的方式將舊的文件數(shù)據(jù)塊刪除掉。同時發(fā)送該文件數(shù)據(jù)塊已被節(jié)點刪除的消息給教師端。教師端根據(jù)收到的消息更新其文件數(shù)據(jù)塊檢索目錄,從文件數(shù)據(jù)塊檢索目錄中刪除掉該節(jié)點與文件數(shù)據(jù)塊的對應(yīng)關(guān)系。
(7)教師端協(xié)作通信子模塊
協(xié)作通信模塊用于教師端節(jié)點與學(xué)生端節(jié)點之間的通信。該模塊基于windows socket通信模型,對其基本功能進行進一步的封裝,負(fù)責(zé)教師端節(jié)點與網(wǎng)絡(luò)中各學(xué)生端之間的文件數(shù)據(jù)塊傳輸以及控制信息的發(fā)送等。如圖3-11所示,該模塊在運行時初始化socket,建立監(jiān)聽。當(dāng)有監(jiān)聽到有新的學(xué)生端請求連接教師端。此時協(xié)作通信子模塊創(chuàng)建一個新線程用于控制信息的交互與文件塊數(shù)據(jù)的傳輸。當(dāng)該線程收到消息后,對消息的類型進行解析,若為控制信息,則將消息傳遞到共享傳輸模塊中的子模塊進行處理。若為數(shù)據(jù)消息,則傳遞給上層透明操作模塊進行處理。
圖10為本發(fā)明學(xué)生端的一種實施方式,包括學(xué)生端文件應(yīng)用模塊、學(xué)生端文件透明操作模塊和學(xué)生端文件共享及緩存模塊;學(xué)生端文件共享及緩存模塊又包括學(xué)生端文件塊請求訪問子模塊、學(xué)生端文件塊緩存管理子 模塊、學(xué)生端文件塊轉(zhuǎn)發(fā)子模塊和學(xué)生端協(xié)作通信子模塊。
(1)學(xué)生端文件應(yīng)用模塊
文件應(yīng)用模塊用于用于調(diào)用本地播放器播放PPT文件塊以及響應(yīng)教師端的PPT操作。
(2)學(xué)生端文件透明操作模塊
學(xué)生端文件透明操作模塊,用于將教師端主動推送的文件塊提供給學(xué)生端文件應(yīng)用模塊同步播放,解析教師端推送的文件塊操作指令并提供給學(xué)生端文件應(yīng)用模塊同步響應(yīng)操作指令。
文件透明操作模塊還用于幫助實現(xiàn)學(xué)生端自主瀏覽。文件透明操作模塊在本地創(chuàng)建一個虛擬磁盤,將遠(yuǎn)程服務(wù)器上的目錄映射到本地的虛擬磁盤上,通過本地磁盤就可以像透明地讀取和操作本地目錄一樣對遠(yuǎn)程目錄和文件進行讀取與操作。
學(xué)生端節(jié)點通過主動請求的方式去獲取某一特定文件數(shù)據(jù)塊。此時,學(xué)生節(jié)點會采用主動獲取的方式去獲取該文件數(shù)據(jù)塊資源。該學(xué)生節(jié)點的用戶程序?qū)⑽募鹡ame,訪問字節(jié)count,偏移量offset發(fā)送給文件數(shù)據(jù)塊請求訪問子模塊。
(3)學(xué)生端文件塊請求訪問子模塊
根據(jù)預(yù)瀏覽文件塊目錄的訪問操作計算預(yù)瀏覽文件塊信息,更具體地說,文件塊請求訪問子模塊根據(jù)用戶程序提供的文件名name、訪問字節(jié)count和偏移量offset計算出需要訪問的文件數(shù)據(jù)塊。首先,在本地緩存中尋找是否有此文件數(shù)據(jù)塊,若本地緩存存有該文件數(shù)據(jù)塊,則直接將該文件塊數(shù)據(jù)返回給上層透明操作模塊。
若本地緩存未存有該文件數(shù)據(jù)塊,可能是因為網(wǎng)絡(luò)原因,教師端發(fā)送文件數(shù)據(jù)塊有延時。則設(shè)置一個等待時間,在等待時間中查詢文件數(shù)據(jù)塊是否到來。若等待時間過后,請求模塊仍沒有收到文件數(shù)據(jù)塊,此時文件塊請求訪問子模塊向教師端節(jié)點申請訪問讀取該文件數(shù)據(jù)塊。教師端節(jié)點 根據(jù)收到的訪問請求,通過查詢文件數(shù)據(jù)塊檢索信息表,找到存有該文件塊的節(jié)點信息,并返回一個學(xué)生節(jié)點的位置信息。請求子模塊則向該節(jié)點發(fā)起讀取數(shù)據(jù)申請。若網(wǎng)絡(luò)中沒有其他節(jié)點存有該文件塊,則教師服務(wù)中心節(jié)點直接向該學(xué)生發(fā)送文件塊。
文件塊請求訪問子模塊收到發(fā)來的文件塊后,通過文件緩存模塊在本地進行緩存,將文件塊的標(biāo)志位Chunk_Flag置為1,然后將文件塊發(fā)給透明操作模塊,供用戶應(yīng)用程序使用。
(4)學(xué)生端的文件緩存管理子模塊
文件緩存管理子模塊用于緩存收到的PPT數(shù)據(jù)塊。當(dāng)學(xué)生端讀取到遠(yuǎn)程的課件文件塊內(nèi)容后,此時在本地要進行緩存的操作。這里的緩存有兩個目的:一、當(dāng)上課開始后,隨著教師講課的過程中,教師即將授課的部分沿著拓?fù)浣Y(jié)構(gòu)向?qū)W生分發(fā)課件內(nèi)容時,學(xué)生端在本地進行緩存。緩存后當(dāng)講課中播放到課件內(nèi)容的位置可以直接在本地通過透明操作模塊將課件文件塊數(shù)據(jù)呈現(xiàn)給本地用戶應(yīng)用程序。二、當(dāng)學(xué)生端節(jié)點想讀取訪問某一未緩存特定課件塊時,在向遠(yuǎn)程教師端發(fā)出訪問請求后,教師端服務(wù)器指定網(wǎng)絡(luò)中緩存有該課件文件快的節(jié)點。學(xué)生節(jié)點向該節(jié)點發(fā)出讀取文件塊的請求。當(dāng)學(xué)生節(jié)點讀取后,在本地進行緩存,供其他學(xué)生訪問用。
(a)文件緩存結(jié)構(gòu)
文件緩存管理子模塊對文件塊采用哈希表的方式進行存儲管理。用戶可以利用哈希函數(shù)很快查詢到相應(yīng)課件文件的存儲位置。尤其當(dāng)用戶需要頻繁的查詢文件塊,并且緩存區(qū)內(nèi)文件塊數(shù)量較多時,采用哈希表的方式管理對于提升查找與增刪文件塊有一定的幫助。圖11是文件存儲的哈希表存儲結(jié)構(gòu):文件數(shù)據(jù)塊的存儲管理方式采用哈希表的方式進行管理,哈希表的鍵為文件數(shù)據(jù)塊ID,哈希表映射的值為文件數(shù)據(jù)塊緩沖區(qū)地址。當(dāng)學(xué)生節(jié)點收到文件數(shù)據(jù)塊以后,將文件數(shù)據(jù)塊ID與128取余,根據(jù)余數(shù)找到對 應(yīng)的哈希表鍵。系統(tǒng)解決哈希沖突的方式是采用鏈地址的方式。哈希表的數(shù)據(jù)結(jié)構(gòu)如下面代碼所示:
其中block_id_high和block_id_low組成文件塊ID,Chunk_Flag為1時表示該數(shù)據(jù)塊通過學(xué)生主動獲取機制獲取,chunk_buf指向該文件塊的緩存區(qū)。
(b)緩存池
文件數(shù)據(jù)塊在系統(tǒng)中緩存在內(nèi)存中??紤]到在文件播放的過程中對文件數(shù)據(jù)的查找與增刪會比較地頻繁。因此這里采用緩存池的方式存儲文件數(shù)據(jù)塊,采用先進先出的方式增刪文件數(shù)據(jù)塊。字符串指針char*chunk_buf為文件數(shù)據(jù)塊的緩存地址。系統(tǒng)初始化時會在內(nèi)存中分配128個FS_CHUNK_SIZE大小的內(nèi)存空間。在緩存池中有兩個鏈表負(fù)責(zé)管理文件的緩存。一個是緩存鏈表一個是空閑鏈表??臻e鏈表初始化時包含128個空閑內(nèi)存塊,當(dāng)有文件數(shù)據(jù)塊在本地進行緩存時,系統(tǒng)從空閑鏈表中取出內(nèi)存塊存入文件數(shù)據(jù),然后加入到緩存鏈表中。
(c)文件塊插入和刪除
文件塊有兩種來源,一種是來自資源轉(zhuǎn)發(fā)模塊,即教師端主動推送,節(jié)點從其父節(jié)點分發(fā)而來的文件塊,這類文件塊的CHUNK_FLAG標(biāo)記為0。另一種是來自資源請求模塊,即學(xué)生端主動向其他節(jié)點發(fā)起訪問請求而 獲取的文件塊,這類文件塊的CHUNK_FLAG標(biāo)記為1。下面是文件塊插入和刪除流程:
1.當(dāng)共享傳輸模塊收到文件數(shù)據(jù)塊后,在本地內(nèi)存池的緩存鏈表中查詢是否存有該文件塊,若有則本地不再進行緩存。
2.查詢空閑鏈表中是否有未被使用的內(nèi)存塊,若有,則直接進入第4步。
3.在緩存鏈表中采用先進先出的方式,刪除掉最舊的一塊文件塊數(shù)據(jù),并將內(nèi)存塊加入到空閑鏈表中。若該文件塊數(shù)據(jù)的CHUNK_FLAG為1,則向教師端發(fā)送文件數(shù)據(jù)塊無效的消息。
4.從空閑鏈表中取出一個內(nèi)存塊,將文件數(shù)據(jù)塊存入該內(nèi)存塊,再鏈入緩存鏈表中。若文件數(shù)據(jù)塊是采用請求訪問的方式從遠(yuǎn)程獲得,則將CHUNK_FLAG標(biāo)識為1。
(d)文件塊查找
文件數(shù)據(jù)塊查找分為以下兩種方式:一種是當(dāng)用戶應(yīng)用程序讀取文件時,首先在本地緩存鏈表中查找文件塊是否存在于本地緩存中;另一種是收到文件數(shù)據(jù)塊后,在本地緩存鏈表中查找文件塊是否存在,進一步判斷是否需要在本地緩存。下面是文件塊的查找流程:
1.根據(jù)透明操作模塊的讀文件操作函數(shù)的參數(shù)(文件名,偏移地址,字節(jié)數(shù)),計算出系統(tǒng)需要的文件數(shù)據(jù)塊ID。
2.由于緩存管理的表大小為128,將文件數(shù)據(jù)塊ID對128取余,得到其哈希表的鍵值。
3.根據(jù)哈希表的鍵值,在哈希表中該鍵值后的鏈表中進行查找,將文件塊ID與鏈表中的每項分別進行對比,若相同則返回該文件數(shù)據(jù)塊。
若與鏈表中每一項都不同,則該文件數(shù)據(jù)塊在本地沒有緩存。
文件轉(zhuǎn)發(fā)子模塊在實際應(yīng)用中,主要有兩個作用,一個是用于實現(xiàn)教師主動推送課件機制下父節(jié)點將課件塊推送到網(wǎng)絡(luò)拓?fù)渲械淖庸?jié)點,并且子節(jié)點接收到數(shù)據(jù)后繼續(xù)向下一層進行分發(fā);另一個是根據(jù)其他學(xué)生節(jié)點的 文件數(shù)據(jù)塊讀取請求,對所需要的文件數(shù)據(jù)塊進行封裝后發(fā)送。
(5)文件塊轉(zhuǎn)發(fā)子模塊
1)教師端沿拓?fù)浣Y(jié)構(gòu)分發(fā)
當(dāng)教師開始上課時,電腦上開始放映課件。教師端的課件分發(fā)模塊接收到透明操作模塊發(fā)來的學(xué)生讀取文件操作。從讀取文件命令中獲取到相關(guān)參數(shù)。根據(jù)偏移量和字節(jié)數(shù)計算出具體的文件數(shù)據(jù)塊檢索號,將檢索號和文件名一起進行計算來算出文件數(shù)據(jù)塊ID。
計算出需要讀取的文件數(shù)據(jù)塊ID后,將文件數(shù)據(jù)塊ID進行封裝(根據(jù)讀取的字節(jié)數(shù)count,文件數(shù)據(jù)塊ID有可能是多個文件數(shù)據(jù)塊ID)。封裝的格式如圖12所示
對后續(xù)學(xué)生節(jié)點位置信息記載表進行遍歷查詢,查詢出與教師端直連的每個后續(xù)學(xué)生節(jié)點的IP地址信息和端口號。與后繼學(xué)學(xué)生節(jié)點建立新的socket通信,向與教師端直連的后續(xù)學(xué)生節(jié)點發(fā)送封裝好的文件數(shù)據(jù)塊。
2)學(xué)生端向其他學(xué)生發(fā)送方式
當(dāng)學(xué)生端接收到教師端或上一級拓?fù)渚W(wǎng)絡(luò)中學(xué)生節(jié)點發(fā)來的文件數(shù)據(jù)塊后。根據(jù)收到的文件數(shù)據(jù)塊的ID,在本地查詢收到的文件數(shù)據(jù)塊是否已被緩存。
若緩存區(qū)存在該文件數(shù)據(jù)塊ID,則不經(jīng)過緩存,直接根據(jù)查詢后續(xù)學(xué)生節(jié)點位置信息表,向每個后續(xù)節(jié)點發(fā)送文件數(shù)據(jù)塊。
這里要注意兩個問題:
1.學(xué)生節(jié)點的不穩(wěn)定性
由于在在線教學(xué)過程中,學(xué)生節(jié)點可能突然加入或者離開課堂。這時,由于學(xué)生節(jié)點的離開,對網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)中該學(xué)生節(jié)點的后續(xù)子節(jié)點接收文件產(chǎn)生了極大的影響,因此我們采用定期心跳包的機制來檢測節(jié)點的狀況。若發(fā)現(xiàn)連續(xù)三個文件數(shù)據(jù)包出現(xiàn)丟包的情況,教師端馬上動態(tài)更新網(wǎng)絡(luò)拓 撲結(jié)構(gòu)。更換一個學(xué)生節(jié)點為中繼節(jié)點,向受到影響的后續(xù)子節(jié)點轉(zhuǎn)發(fā)文件數(shù)據(jù)塊。
2.學(xué)生節(jié)點的流量控制
若與某個學(xué)生節(jié)點直連的后續(xù)子節(jié)點較多,該學(xué)生節(jié)點的轉(zhuǎn)發(fā)流量可能很大,這樣該學(xué)生節(jié)點可能出現(xiàn)網(wǎng)絡(luò)狀況較卡的情況。我們定期檢測網(wǎng)絡(luò)中節(jié)點流量情況,若某學(xué)生節(jié)點流量較大,則通知教師服務(wù)中心節(jié)點,對該節(jié)點的后續(xù)子節(jié)點進行重新分配,減輕該節(jié)點的流量壓力。
(f)后續(xù)學(xué)生節(jié)點位置信息表
在課件的轉(zhuǎn)發(fā)過程中對后續(xù)節(jié)點進行發(fā)送課件文件數(shù)據(jù)塊時,需要查詢后續(xù)節(jié)點位置信息表來確定后續(xù)節(jié)點的IP地址和端口號。該后續(xù)節(jié)點信息表數(shù)據(jù)結(jié)構(gòu)由鏈表的方式實現(xiàn)。其數(shù)據(jù)結(jié)構(gòu)如圖13所示:
當(dāng)網(wǎng)絡(luò)中出現(xiàn)個別節(jié)點脫離拓?fù)渚W(wǎng)絡(luò)的情況時。這時,教師端根據(jù)網(wǎng)絡(luò)拓?fù)湫畔⒐芾碜幽K動態(tài)更新網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。此時,教師端節(jié)點將向相應(yīng)受到影響的節(jié)點發(fā)送新的后繼學(xué)生節(jié)點位置信息表。下教師端更新后續(xù)節(jié)點位置信息表的消息格式如圖14所示。其中node_num表示其后繼學(xué)生節(jié)點的個數(shù),IP和PORT表示與該節(jié)點直連的后續(xù)學(xué)生節(jié)點的位置信息。
(6)學(xué)生端的協(xié)作通信子模塊
在文件共享傳輸模塊中,協(xié)作通信模塊主要負(fù)責(zé)監(jiān)聽連接,解析處理消息以及教師端與學(xué)生端協(xié)作通信的功能??刂泼钕⒉捎眯切图軜?gòu)進行直接連接控制。
協(xié)作通信模塊在系統(tǒng)中,作為將文件請求管理子模塊,文件轉(zhuǎn)發(fā)子模塊,文件緩存管理子模塊聯(lián)系在一起的紐帶。通信子模塊將windows socket進行封裝,并進行監(jiān)聽學(xué)生端的請求,解析控制消息與進行響應(yīng)的處理。
如圖15所示,在協(xié)作通信模塊中,運行著一個監(jiān)聽線程,進行完socket初始化以后,當(dāng)監(jiān)聽到有新的連接請求時,該線程創(chuàng)建一個新線程,建立連接。在該線程中,對消息進行解析和處理。解析通信信息時,對消息中 的Type關(guān)鍵字進行判斷,跟據(jù)Type關(guān)鍵字的類型進行判斷。通信模塊根據(jù)消息的類型將消息發(fā)送到相應(yīng)的模塊內(nèi)進行處理。
本發(fā)明可實現(xiàn)在線授課過程中教師在本地控制播放自己的多媒體課件,學(xué)生端實時地遠(yuǎn)程讀取文件數(shù)據(jù)并同步播放課件。學(xué)生端應(yīng)用程序不通過提前下載的方式獲取文件,而是在授課過程中透明地訪問遠(yuǎn)程教師端分享出來的文件數(shù)據(jù)。在該模型中,教師端服務(wù)器是文件數(shù)據(jù)原始提供者,并向節(jié)點提供文件數(shù)據(jù)塊檢索和維護整個拓?fù)渚W(wǎng)絡(luò)。學(xué)生端從網(wǎng)絡(luò)中獲得文件數(shù)據(jù)并提供給用戶應(yīng)用程序使用,同時在本地緩存數(shù)據(jù),用于向其他節(jié)點轉(zhuǎn)發(fā)。
本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。