摘 要: 介绍了基于Web服务的个人网页资源管理组件的设计,实现了Web用户在Internet上收集网页,并将这些网页自动存储在Web服务器的个人网页存储器上,为Web用户提供个人网页的访问和管理服务。Web网站的服务提供者也可以使用该组件实现Internet增值服务。
关键词: 网页 Web服务 组件
1 方案的提出 在互联网时代,人们通过Internet收集存储一些个人需要的网页,供日后查阅。最简单的办法是使用IE或Netscape的“另存为”功能,把这些网页保存在个人计算机的文件夹中。近年来,也出现了一些好的工具帮助收集整理网页[1]。例如,利用软件“网海拾贝”可以将网页收藏到本地数据库中,软件“Webzip”可以将网站镜像打包下载到一个zip文件中。使用这些工具软件能方便地搜集所需的网页资源,但问题是,若无备份,则无法在其他的机器上看到这些网页。此外,还可使用MSN浏览器将感兴趣的网页放入收藏夹,并通过MSN浏览器将这个网页的URL送回服务器。以后,网络用户就能在任何一部机器上通过MSN浏览器找到收藏的URL,并通过该URL访问相关网页。但它的缺点是,当收藏的URL不能够被访问时(如该网页被所链接的网站删除),也就无法访问该网页了,并且无法直接对所收集的网页进行管理。
本文提出的新方案是,借用Web服务器的个人存储空间,存储和管理个人网页。其思路是:开发一个基于Web服务的组件(称为Url_Tool组件),Url_Tool组件布署和运行在Web服务器端。用户经注册成为Url_Tool的客户后,就能通过Internet使用Url_Tool的功能,将感兴趣网页的URL提交到Web服务器,由Url_Tool组件自动完成网页下载并保存在该Web服务器。
这是一种新的网络资源搜集和网上资源共享方式。网站经营者还可以对用户存储的网页作进一步的“数据挖掘”。这些数据被转化成有商业价值的信息,网站籍此掌握网民的消费热点和消费需求,并向网民提供个性化服务。
2 组件设计
2.1 组件结构 Url_Tool组件分成客户端和服务器端2部分。
服务器端又由3个基本功能模块构成:
Url_Tool客户端的基本功能是:向Url_Tool组件提交用户信息和需要存储的网页地址;使用Url_Tool界面管理个人网页空间。
Url_Tool服务器端的基本功能是:验证用户信息,接受客户端下载网页的请求,并把这些请求输入到Url数据库;在网络空闲时,自动下载HTML/XML网页,建立和维护个人网页存储空间;向用户提供管理Web网页操作界面,实现对个人网页的自主管理。
Url_Tool组件的结构示意图如图1所示。
2.2 通信协议 Url_Tool组件的服务器端和客户端的交互是基于TCP/IP Socket编程的,消息格式基于HTML/XML。为此,定义了一个新的协议集,即Url-Summit交互指令。Url-Summit指令主要是为了解决客户端程序和URL存储服务器的交互问题。Url-Summit协议集的具体内容包括Url-Tool服务端向客户端发送的内容和Url-Tool客户端向服务端发送的请求,分别如表1和表2所示。
以下是Url-Summit协议集的一个实例。其中S表示服务端,C表示客户端。用户名是“jack”,密码是“mypassword”。
S:100 Hello
S:101 User
C:jack
S:102 Password
C:mypassword
S:202 OK
登录成功
C:211 http://www。google。com/
S:202 Add Ok
添加成功
C:300 logout
S:301 bye
离开
2.3 数据库设计 Url_Tool在服务器端建立名为Url_D的数据库,Url_D的数据库主要包含2个数据库表,分别是用户信息表KUser和用户任务表KTask。其数据结构分别如表3和表4所示。用户任务表保存用户存储的个人网页Url地址及其状态。
Url_Tool用户管理个人网页的SQL语句如下例。
SELECT uID FROM KUser WHERE name=′用户名′
AND password=′密码′;//验证用户登录,
//返回记录数为1,就可以登录;反之,拒绝登录
SELECT link FROM KTask WHERE started=0
ORDER BY tID LIMIT 0,1;//获取任务,每次
//获取一个任务,即需要下载的页面的URL
UPDATE KTask SET started=1 WHERE tID=′任务ID′;//启动任务
UPDATE KTask SET finished=1
WHERE tID=′任务ID′;//完成任务
2.4 URL存储服务器设计 URL的存储检索效率是在Internet上构建分布式信息搜集系统的关键[2],其核心是支持多用户并行访问。Url_Tool组件的存储服务器结构如图2所示。
Url_Tool组件的存储服务器程序流程如图3所示。
一般的TCP/IP侦听服务器要同时支持多个用户,主要通过以下几种形式支持并行服务。
(1)单进程结合I/O多路复用模式,通过定时轮流查询资源集合,实现多用户连接。(2)多进程模式(multi-fork):一个子进程对应于一个客户端程序,跟客户端程序交互[3]。(3)多线程模式(multi-thread):一个线程对应于一个客户端程序[4]。
Url_Tool系统采用多线程的并行模式管理多用户交互,多线程能够提升系统性能,降低资源消耗。其原理是同时预先建立多个线程等待提供服务,当有需求出现时,预先建立的线程就可以立即满足需求,提供服务。
2.5 自动下载程序设计
2.5.1 程序结构 主要包括以下模块。
downop:下载模块
hashop:哈希表操作模块
curlop:curl操作模块
html_parse:html解释器模块
url_parse:url解释模块
其中,hashop和html_parse模块是把页面的相关元素(如图片、flash等)记录下来,然后进行下载。
Url_Tool组件的自动下载程序结构如图4所示。
2.5.2 程序流程 Url_Tool组件的自动下载程序处理流程如图5所示。
2.5.3 程序说明 如图5所示,downop先取得下载的URL和存放地址;进行初始化工作,调用hashop_init( )建立一个hash表。
Curlop_text_tobuff模块根据hash表的内容将有关页面缓存到buf。注意curlop_text_tobuff(&url,&len)中的URL可以改变,目的是取得最终的URL地址(有些页面可能会进行html forward,转接操作)。len是缓存的长度。缓存由curlop_text_tobuff动态分配。
hashop_set_base_url(url)用于设定基础的URL。把最终有效的URL设定作为基础地址。因为有些html文档可能会使用相对地址(例如./image/google.gif),所以必须设置正确的基础地址,才可以下载。
generate_list(buf,len)调用html_parse解释页面,然后把需要下载的连接放入hash表。
download_list( )主要是调用curlop下载hash表的内容。
Change_html_link( )调用html_parse把buf储存的html/XML连接转为本地连接,然后保存html/XML页面。
3 组件安装和运行 Url_Tool被封装成为一个Web服务组件,通过Web网站向用户提供网页暂存服务。由于该系统采用基于TCP/IP协议的XML消息格式实现用户和服务器的交互,所以,Internet上的任何用户都可以通过浏览器软件注册和使用该系统。用户注册后,该组件的客户端自动下载到客户机并自动完成安装和注册,供用户使用。
参考文献1 王屺.离线浏览器集锦.电脑技术,2002;10(1)
2 宋晖,郑子颖,张岭等.分布式信息搜集系统中URL存储检索的设计与分析.上海交通大学学报,2003;37(3)
3 程树良.Unix下的多进程及进程间的通信.交通与计算机,2000;19(2)
4 厉海燕,李新明.用户级实时线程的设计与实现.微机发展,2001;11(4)