文/鄭宏濤 李武衛(wèi) 涂揚
目前,基于nexusphp的資源共享平臺(以下簡稱PT)成為各高校建設(shè)IPv6的示范應(yīng)用,國內(nèi)建立校內(nèi)資源共享站點的高校大多選用nexusphp作為其建站平臺,其中對外校開放且影響力較大的有北京郵電大學(xué)的“北郵人”、上海交通大學(xué)的“葡萄”和西北農(nóng)林科技大學(xué)的“麥田”等。
PT是基于BT協(xié)議改進后演化而來,既具有BT模式的分布式資源存儲優(yōu)勢,又改進了BT模式下peer之間的松散耦合關(guān)系。每個peer的下載權(quán)限和上傳量關(guān)聯(lián),定量反映在每個用戶身上稱為分享率,只有分享率滿足一定標準的用戶才有權(quán)限下載。PT的資源共享特性和內(nèi)容可控性很好地滿足了學(xué)校對資源管理過程中的安全性要求,成為建立資源共享平臺的首選。
圖1 某校園網(wǎng)出口帶寬分析
用戶需要某個資源時一般利用下載工具通過互聯(lián)網(wǎng)下載,如果這個資源是近期的熱點資源(熱播的影視、大型軟件的新版本),這些資源將重復(fù)地占用校園網(wǎng)出口帶寬。通過對某校園網(wǎng)出口帶寬分析如圖1所示,從中可以看到,Web瀏覽所占比例約為5%,下載和視頻流量占據(jù)了出口帶寬的65%以上。校園網(wǎng)用戶上網(wǎng)行為具有明顯的特征,P2P和在線視頻資源的重復(fù)率極高。如果能將下載和在線視頻的流量通過校內(nèi)服務(wù)解決,將對緩解校園網(wǎng)出口帶寬壓力、提高校園網(wǎng)服務(wù)質(zhì)量起到積極影響。
在傳統(tǒng)意義上,PT利用校園網(wǎng)的高帶寬優(yōu)勢,發(fā)揮P2P文件交換網(wǎng)絡(luò)的長處,為校園網(wǎng)提供一個資源共享和交流的平臺;依托于校園網(wǎng)高帶寬以及熱點資源受眾密集的共性,PT能極大緩解校園網(wǎng)用戶對出口帶寬的依賴,將用戶的需求通過校園網(wǎng)內(nèi)部數(shù)據(jù)交換解決,提高用戶上網(wǎng)體驗。
PT運行機制概括為分享受益,這決定了以下兩個方面:1.PT必須要組織專人上傳和更新資源,這給PT管理維護者帶來很大壓力;2.PT使用者必須要下載后才能使用這些資源,這對一些習(xí)慣于在網(wǎng)上觀看視頻的用戶來說并沒有多大吸引力。
基于上述分析,我們對nexusphp的代碼研究后提出了一套適用于校園網(wǎng)環(huán)境下的資源共享解決方案。對nexusphp的優(yōu)化主要包括以下兩個方面:1.針對nexusphp開發(fā)了一套全自動資源更新系統(tǒng),用于替代手動的資源上傳,提高校園網(wǎng)資源的更新速度和更新質(zhì)量,解放人力資源。2.在PT內(nèi)容頁面上增加了在線播放功能,彌補了PT資源只能下載后使用的不便之處。整合之后可以實現(xiàn)校園網(wǎng)資源快速更新,通過PT資源共享平臺快速擴散節(jié)省出口帶寬,視頻資源可以直接在線播放降低用戶的等待時間,將原來需要通過出口,帶寬解決的問題通過校內(nèi)數(shù)據(jù)交換得到解決。
要實現(xiàn)全自動資源更新必須解決下面幾個問題:
1. 資源自動采集;
2. 資源自動發(fā)布;
3. 資源自動做種。
資源來源需要具備下列特點:更新速度快,資源介紹規(guī)范整齊便于后期處理?;趎exusphp的資源發(fā)布入口只有upload.php一個,將資源來源處采集到的信息格式化后保存在數(shù)據(jù)庫中,在原始資源下載完成后通過takeupload.php上傳到目標站點。資源上傳完成后需要再次下載種子重新做種。
nexusphp的RSS訂閱頁面提供完整的內(nèi)容介紹和種子鏈接,是資源來源的最佳選擇。此處選擇其他站點RSS資源索引頁面作為自動采集的源頭。自動更新系統(tǒng)需要實現(xiàn)一個RSS解析類,負責(zé)從RSS頁面提取出系統(tǒng)需要的種子鏈接和內(nèi)容介紹等元素并保存到數(shù)據(jù)庫中。RSS解析完成之后,系統(tǒng)掃描數(shù)據(jù)庫中已經(jīng)更新的資源,下載新增資源的種子并添加到下載工具中。此處需要實現(xiàn)一個torrent解析類,解析torrent的大小和info-hash并保存在數(shù)據(jù)庫中。為了便于對下載過程進行控制,下載工具采用transmission-daemon。利用transmissiondaemon提供的接口在資源下載完成后獲取該資源的info-hash,利用info-hash在數(shù)據(jù)庫定位已經(jīng)完成的資源。
在原始資源下載完成之后便可將該資源發(fā)布到目標站點上,nexusphp對資源發(fā)布者采用會話身份認證,即只有登錄成功的用戶才能發(fā)布資源。此處我們采用curl模擬http行為實現(xiàn)用戶登錄方式,登錄時所需要關(guān)鍵代碼如下所示,此處需要注意模擬登錄動作時需要保存該站點的cookie以備后期使用。
$login['username']=$username;
$login['password']=$password;
$cookie_jar = tempnam('./cookie','cookie');
setcookie('c_lang_folder','chs');
setcookie('c_secure_ssl','');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $loginurl);
curl_setopt($ch, CURLOPT_POST, 1);
//set post data
curl_setopt($ch, CURLOPT_POSTFIELDS, $login);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_exec($ch);
自動上傳資源就是利用curl實現(xiàn)與網(wǎng)站的數(shù)據(jù)交互,此處需要構(gòu)造上傳頁面所需要的各項參數(shù)。前文中提到,nexusphp只允許認證成功的用戶上傳資源,因此在構(gòu)造數(shù)據(jù)時需要特別指定登錄時保存的cookie數(shù)據(jù)用來進行免登錄認證。nexusphp在上傳成功后會將頁面重定向到該資源的詳情頁上,因此還需要設(shè)置CURLOPT_FOLLOWLOCATION選項。
$fields['file'] = '@'.$torrent['filename'];
$fields['name'] = $torrent['name'];
$fields['small_descr'] = $torrent['small_descr'];
$fields['url'] = $torrent['imdb'];
$fields['nfo'] = '';
$fields['descr'] = $torrent['descr'];$fields['type'] = '401';
$fields['medium_sel'] = '';
$fields['codec_sel'] = '';
$fields['standard_sel'] = '';
$fields['audiocodec_sel'] = '';
$fields['team_sel'] = '';
$fields['uplver'] = 'yes';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $uploadurl );
curl_setopt($ch, CURLOPT_POST, 1 );
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_REFERER, $referurl);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);//get redirect content
curl_setopt($ch, CURLOPT_NOBODY, false);
資源發(fā)布完成后需要分析目標站點返回的頁面,從中提取出資源的下載鏈接并加載到下載工具中完成做種。
通過以上三步可以實現(xiàn)資源自動采集和自動發(fā)布,為校園網(wǎng)資源共享平臺提供源源不斷的資源。提高資源共享平臺的更新速度和資源質(zhì)量。
讓nexusphp支持在線播放的思路是:在內(nèi)容頁面上提供一個與播放器關(guān)聯(lián)的鏈接,點擊鏈接時會自動調(diào)用播放器下載并播放資源。v6player是北京郵電大學(xué)一款集下載和播放一體的播放器,支持IPv4和IPv6,兼容常見的多媒體封裝格式和編碼方式,能夠解析torrent并且實現(xiàn)邊下載邊播放。部署方式為修改details.php,增加在線點播按鈕,完成后點擊直接播放按鈕會調(diào)用v6player播放視頻,在校園網(wǎng)環(huán)境下緩沖時間不超過5秒便可觀看。點擊直接播放按鈕后自動調(diào)用v6player。可以看到v6player通過校園網(wǎng)鏈接做種者速度極速升高,視頻緩沖時間不到5秒后就能夠流暢觀看。
通過自動更新系統(tǒng)可以持續(xù)穩(wěn)定高效地為校園網(wǎng)資源共享平臺輸入最新最快的資源,使得校園網(wǎng)資源共享平臺維護者從原來的依靠人工手動上傳資源的重復(fù)繁雜工作中解放出來,對視頻資源結(jié)合頁面播放功能,省略了原有下載步驟,可直接在線觀看,極大地提高了資源共享平臺對在線觀看視頻用戶的粘性。
整合后的PT平臺除了原有的資源共享和用戶交流功能之外,還可實現(xiàn)視頻點播功能。本文通過研究PT運行機制,自主開發(fā)了PT系統(tǒng)的資源自動更新功能,解決資源共享平臺的資源來源問題;結(jié)合北京郵電大學(xué)開發(fā)的v6player播放器,為PT增加在線點播功能。整合后的PT平臺除了原有的資源共享和用戶交流功能之外,還可實現(xiàn)視頻點播功能。對用戶而言,普通文件可以通過常規(guī)途徑進行下載,視頻資源可以選擇在線觀看和下載,方便了用戶的使用同時增加了PT對用戶的吸引力。從校園管理者的角度來看,下載和在線視頻通過校內(nèi)PT解決后能極大減輕校園網(wǎng)出口帶寬壓力并且方便學(xué)生溝通交流,增強校園文化凝聚力。