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