文/郑宏涛 李武卫 涂扬
目前,基于nexusphp的资源共享平台(以下简称PT)成为各高校建设IPv6的示范应用,国内建立校内资源共享站点的高校大多选用nexusphp作为其建站平台,其中对外校开放且影响力较大的有北京邮电大学的“北邮人”、上海交通大学的“葡萄”和西北农林科技大学的“麦田”等。
PT是基于BT协议改进后演化而来,既具有BT模式的分布式资源存储优势,又改进了BT模式下peer之间的松散耦合关系。每个peer的下载权限和上传量关联,定量反映在每个用户身上称为分享率,只有分享率满足一定标准的用户才有权限下载。PT的资源共享特性和内容可控性很好地满足了学校对资源管理过程中的安全性要求,成为建立资源共享平台的首选。
图1 某校园网出口带宽分析
用户需要某个资源时一般利用下载工具通过互联网下载,如果这个资源是近期的热点资源(热播的影视、大型软件的新版本),这些资源将重复地占用校园网出口带宽。通过对某校园网出口带宽分析如图1所示,从中可以看到,Web浏览所占比例约为5%,下载和视频流量占据了出口带宽的65%以上。校园网用户上网行为具有明显的特征,P2P和在线视频资源的重复率极高。如果能将下载和在线视频的流量通过校内服务解决,将对缓解校园网出口带宽压力、提高校园网服务质量起到积极影响。
在传统意义上,PT利用校园网的高带宽优势,发挥P2P文件交换网络的长处,为校园网提供一个资源共享和交流的平台;依托于校园网高带宽以及热点资源受众密集的共性,PT能极大缓解校园网用户对出口带宽的依赖,将用户的需求通过校园网内部数据交换解决,提高用户上网体验。
PT运行机制概括为分享受益,这决定了以下两个方面:1.PT必须要组织专人上传和更新资源,这给PT管理维护者带来很大压力;2.PT使用者必须要下载后才能使用这些资源,这对一些习惯于在网上观看视频的用户来说并没有多大吸引力。
基于上述分析,我们对nexusphp的代码研究后提出了一套适用于校园网环境下的资源共享解决方案。对nexusphp的优化主要包括以下两个方面:1.针对nexusphp开发了一套全自动资源更新系统,用于替代手动的资源上传,提高校园网资源的更新速度和更新质量,解放人力资源。2.在PT内容页面上增加了在线播放功能,弥补了PT资源只能下载后使用的不便之处。整合之后可以实现校园网资源快速更新,通过PT资源共享平台快速扩散节省出口带宽,视频资源可以直接在线播放降低用户的等待时间,将原来需要通过出口,带宽解决的问题通过校内数据交换得到解决。
要实现全自动资源更新必须解决下面几个问题:
1. 资源自动采集;
2. 资源自动发布;
3. 资源自动做种。
资源来源需要具备下列特点:更新速度快,资源介绍规范整齐便于后期处理。基于nexusphp的资源发布入口只有upload.php一个,将资源来源处采集到的信息格式化后保存在数据库中,在原始资源下载完成后通过takeupload.php上传到目标站点。资源上传完成后需要再次下载种子重新做种。
nexusphp的RSS订阅页面提供完整的内容介绍和种子链接,是资源来源的最佳选择。此处选择其他站点RSS资源索引页面作为自动采集的源头。自动更新系统需要实现一个RSS解析类,负责从RSS页面提取出系统需要的种子链接和内容介绍等元素并保存到数据库中。RSS解析完成之后,系统扫描数据库中已经更新的资源,下载新增资源的种子并添加到下载工具中。此处需要实现一个torrent解析类,解析torrent的大小和info-hash并保存在数据库中。为了便于对下载过程进行控制,下载工具采用transmission-daemon。利用transmissiondaemon提供的接口在资源下载完成后获取该资源的info-hash,利用info-hash在数据库定位已经完成的资源。
在原始资源下载完成之后便可将该资源发布到目标站点上,nexusphp对资源发布者采用会话身份认证,即只有登录成功的用户才能发布资源。此处我们采用curl模拟http行为实现用户登录方式,登录时所需要关键代码如下所示,此处需要注意模拟登录动作时需要保存该站点的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实现与网站的数据交互,此处需要构造上传页面所需要的各项参数。前文中提到,nexusphp只允许认证成功的用户上传资源,因此在构造数据时需要特别指定登录时保存的cookie数据用来进行免登录认证。nexusphp在上传成功后会将页面重定向到该资源的详情页上,因此还需要设置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);
资源发布完成后需要分析目标站点返回的页面,从中提取出资源的下载链接并加载到下载工具中完成做种。
通过以上三步可以实现资源自动采集和自动发布,为校园网资源共享平台提供源源不断的资源。提高资源共享平台的更新速度和资源质量。
让nexusphp支持在线播放的思路是:在内容页面上提供一个与播放器关联的链接,点击链接时会自动调用播放器下载并播放资源。v6player是北京邮电大学一款集下载和播放一体的播放器,支持IPv4和IPv6,兼容常见的多媒体封装格式和编码方式,能够解析torrent并且实现边下载边播放。部署方式为修改details.php,增加在线点播按钮,完成后点击直接播放按钮会调用v6player播放视频,在校园网环境下缓冲时间不超过5秒便可观看。点击直接播放按钮后自动调用v6player。可以看到v6player通过校园网链接做种者速度极速升高,视频缓冲时间不到5秒后就能够流畅观看。
通过自动更新系统可以持续稳定高效地为校园网资源共享平台输入最新最快的资源,使得校园网资源共享平台维护者从原来的依靠人工手动上传资源的重复繁杂工作中解放出来,对视频资源结合页面播放功能,省略了原有下载步骤,可直接在线观看,极大地提高了资源共享平台对在线观看视频用户的粘性。
整合后的PT平台除了原有的资源共享和用户交流功能之外,还可实现视频点播功能。本文通过研究PT运行机制,自主开发了PT系统的资源自动更新功能,解决资源共享平台的资源来源问题;结合北京邮电大学开发的v6player播放器,为PT增加在线点播功能。整合后的PT平台除了原有的资源共享和用户交流功能之外,还可实现视频点播功能。对用户而言,普通文件可以通过常规途径进行下载,视频资源可以选择在线观看和下载,方便了用户的使用同时增加了PT对用户的吸引力。从校园管理者的角度来看,下载和在线视频通过校内PT解决后能极大减轻校园网出口带宽压力并且方便学生沟通交流,增强校园文化凝聚力。