java多线程下载课程设计

移百WAP平台v1.0
课程总结报告

2018年 8月15日

目录

1 课程设计简介 1
1.1 课程设计的目的 1
1.2 课程设计内容 1
2 数据结构的设计 2
2.1 预定义 2
2.2 结构体 2
2.3 全局变量和函数 2
3 功能模块(或算法)描述 5
3.1 模块划分 4
3.2 模块流程图 6
4 程序运行结果 10
5心得体会 13
参考文献 14

1 课程设计简介

1.1 课程设计的目的

课程设计的目的 :使学生掌握如果综合运用Java 语言,处理高并发访问数据系统的设计;加深基于UDP的网络编程知识实际运用的能力,加深多线程技术实际运用能力。掌握面向对象数据库DB4o的重点知识,掌握缓存技术Cache4j在实际项目中的运用。熟悉基于HTTP的WAP端访问的业务处理方法以及内网CMS系统管理业务数据的流程。

1.2 课程设计内容

1) Java多线程技术,线程池的概念,以及实现项目用于接受UDP包和处理业务客户请求的线程池的代码和数据Check线程池的代码。
2) Java网络编程,主要包含,基于TCP/UDP 协议的socket 编程。
实现项目CacheServer服务器代码。
定义项目UDP包的大小和具体格式。
定义项目基于UDP通信协议。
拆分读/写请求的数据(Request)并实现服务端,基于通信协议,进行数据重组。并对丢包情况使用线程池,进行处理。考虑到正常发包情况下,内网丢包概率极低,服务端,并未开启,对延迟的包的处理,只是简单日志打印,并丢弃。
3) 缓存技术,具体实现为Cache4j框架。使用SynchronizedCache和BlockingCache 来分别实现业务数据的缓存和DB4o数据库连接的缓存,缓存对象Evict Policy 为LRU算法。
4) 对象数据库技术,具体实现为DB4ov8.0,使用对象数据库作为项目的数据存储源,关系数据库为辅。实现把表数据,划分到DB4o数据库文件中,在DAO层实现对数据的快速访问,并建立连接缓冲。
5) 使用Tomcat 开源Web服务器,部署应用WAP端,使用 HTTP Servlet组件,通过DatagramSocket 访问CacheServer的业务组件,实现对业务数据的访问。

2 项目概要设计
2.1 需求说明:
移百系统考虑到用户量大,数据访问频繁,需要针对移百平台数据及用户访问特点,进行数据存储优化,建立高速缓冲机置(基于FIFO及LRU算法)缓解底层数据库压力,增加数据访问速率。缓冲系统支持分布式,并提供绝对数据安全的文件系统及机置,支持数据类型可扩充。

2.2 功能设计:
Cache机置
Cache支持分布式(基于UDB),cache节点经过系统配置后可以任意添加CacheServer节点,每台CacheServer节点之间建立一种写同步机置,当某台CacheServer收到写请求时,会根据系统配置中的节点分布,自动将写请求转发至其它节点,以保证整体CacheServer的数据的一致性。CacheServer自身具备数据整理功能,可以通过系统任务,在某个时间段内进行数据增量更新及数据碎片的整理。
Cache Server & Cache Client工作机置
Cache分为Client端和服务端。Client和Server端组成了一个三层缓冲机置,Server端底层使用DB4O将数据存储于本地磁盘。数据请求由Client发起,Client优先从自身的内存缓冲中查找数据,当数据不存在,Client向Server发起数据请求,Server端接收首先从本地内存Cache(应用LRU算法)取数据,当数据不存在时从本地磁盘中调出请求数据,同时载入本地CacheServer的内存缓冲(内存缓冲应用LRU算法,并通过配置限定缓冲中的对象最高占据内存空间,当内存中的数据占用超额会按LRU算法,抛弃不被频繁访问数据)。Client接收到请求数据后,同时也会将数据置入本地内存缓冲(Client内存机置使用同样的Server端的内存机置),Client再遇到此数据请求时,将直接从本地缓冲中取出。
3)Cache Server间的数据同步
每个Cache Server端均维护一个排已的Cache Server列表,当某台Cache Server收到数据写请求时,会将数据进行更新或重新写入,同时会将写请求写入本地的一个事件处理栈中,当栈中有数据写入时会唤醒事务处理,处理线程会将数据挨个发送至排已的Cache Server列表中的各个服务器。
例:CMS新闻的数据更新:
系统调度,按设置的时间间隔,请求Cache Server发起CMS增量更新申请。Cache Server调用数据增量导出接口,数据增量导出完成后。Cache Server事务会更新其它Cache Server服务器,同时会根据Cache Server端中配置的可充许访问Client端列表,发送数据内存片断清除请求(非全量清除,仅为增量更新涉及的数据片断)。清除Client端历史缓冲数据。

            (Cache Server及Client架构图)
 CMS信息发布至CACHE的过程:wap.118114.cn中查看的CMS信息,一般由CacheServer 缓冲这些信息。数据采用增量方式发布。下面将详细介绍CMS数据发布至CacheServer的过程。

数据增量同步:利用Triger (BST_ON_CHANNEL_LOCALINO_CHANGE,和BST_ON_LOCALINO_CHANGE)来监控相应表的数据增加和更新,若用新的数据或删除,triger会负责将发生变化的数据标识插入到TEMP_CH_LOCALINFO(频道和CMS信息的关联关系变化)和TEMP_LOCALTION(基本CMS信息的新增或删除、过期等状态),在CacheServer的服务器上会有一个Clientf.sh(具体可在服务器上使用crontab –e查看)定时的去查询这两个过程表,一次查询过后缓冲这些增量变化数据,并清除已缓冲的数据记录。
若某频道下有新的CMS信息,CacheServer会删除已有的缓冲数据。当下一请求此频道信息时CacheServer会进行频道下的信息排序运算。并将结果缓冲至缓冲中(当然为了增加数据运算速度,在进行上一数据增量读取时,已对数据进行了按地区分组),这样就完成了数据的增量更新(注意:此时存CMS详细信息并未存入缓冲,存入的只是频道及CMS信息关系数据)。当用户请求,某个CMS信息第一次被命中,会向CacheServer请求读取CMS信息,此时发现缓冲中是空的,会发起向数据库读取,读取后将信息显示同时再向缓冲发一分数据拷贝,以后再用相应的请求此CMS信息时,直接由缓冲提供。
2.3 数据库设计
Cache Server未使用关系性数据库,在Server端的数据缓冲保存在DB4O对象数据库中,做为数据存放源,储放的对象只许遵循java.io. Serializable即可进行存储。

3 功能模块(或算法)描述

3.1 信息内容发布
业务流程:
信息管理员通过CMS系统录入信息,最终将信息导入至mysql中,与此同时,CMS信息解析模块,会通过调用news_client,向某一台CacheServer写入解析后的数据对象,被写的CacheServer负责将本次的写数据片断更新至其他CacheServer。
3.2 移动终端信息内容查看
业务流程:
终端请求查看资讯、广告等内容,则通过F5负载转发至某台CacheServer,首先会在本地的Cache缓冲中找相应的请求数据,当数据未找到时,CacheServer会请求从DB4o中查找相应的数据,在请求CacheServer获取数据后,该CacheServer可以将信息置入至本地缓冲池中,展示给用户。CacheServer支持多台集合,CacheServer可以利用一个写侦听,来维护各个CacheServer之间的数据一致性。

3.2 login 登陆
用户输入用户名和密码,在passwd文件中查找是否有此用户,核对密码。正确则登陆成功,当前目录设定到当前用户文件夹下。
3.3 ialloc 申请inode空间
先检测inode位图是否加锁,是则退出。加锁,检测inode空间是否还有已满,是则退出。在inode位图中顺序查找空闲的inode,找到则返回inode地址,block解锁。函数结束。流程图3.3

ialloc 流程图3.3                           block 流程图3.4

3.4 balloc 申请block空间
先检测block位图是否加锁,是则退出。加锁,检测block空间是否还有k个空闲,否则退出。在还有空闲block的组中查找是否有k个空闲,没有则去下一个block组中查找,找到则返回block地址,block解锁。函数结束。流程图3.4
3.5 create 创建文本文件
查找当前目录下是否有同名文件,是则退出,否则让用户输入文本文件内容,以‘###’结束。申请inode空间(ialloc函数),申请硬盘block空间(balloc函数),申请失败则结束。将文件内容写入inode空间和block空间。修改当前目录的结构,修改超级快,修改inode位图,block位图,写入模拟硬盘。流程图3.5

create流程图3.5 cdir流程图3.6
3.7 cdir 创建文件夹
查找当前目录下是否有同名文件,是则退出,否则,申请inode空间(ialloc函数),申请硬盘block空间(balloc函数),申请失败则结束。将文件夹内容写入inode空间和block空间。修改当前目录的结构,修改超级快,修改inode位图,block位图,写入模拟硬盘。流程图 3.6

3.7 read edit –读取和追加文本文件
Read—-查找当前目录下是否该文件,没有则退出,否则调用access()权限判断,有权限则判断是不是文件,不是则退出,是文件则读取文件并显示。流程图3.7(1)。
Edit—-调用读取文件模块,读取成功则用户输入追加的内容,如果追加的内容大于一个block则申请block空间,失败则退出,申请成功则保存文件。流程图3.7(2)

流程图3.7(1) 流程图3.7(2)
3.8 access(文件名) 权限判断
先判断当前目录是否有该文件,在当前目录的block找到该文件,判断当前登录用户是哪个组,判断是否该用户创建,判断该文件的可见级别。
如果是该用户创建的 则有读写权限如果当前用户是管理员组的 也具有读写权限如果该文件是用户可查看文件则都具有权限。
int access()
{if(inodetemp->di_uid==cur_user->p_uid)//如果是该用户创建的 则有读写权限
return 1;
else if(cur_user->p_gid==0)//如果当前用户是管理员组的 也具有读写权限
return 1;
else if(inodetemp->di_gid==1)//如果该文件是用户可查看文件 则都具有权限
return 1;
return 0; }
3.9 cd –进入子目录 或上级目录
查找当前目录是否有该子目录,没有则退出,调用access()判断当前用户是否有权限,无则退出,有则读取该子目录的inode,将当前目录指向该目录。
3.10 attr(文件名)查看文件或者文件夹的属性
先查找当前目录下是否有该文件或目录,有则判断文件是否系统文件,是否文本文件,是否目录,由谁创建,属于什么组,占用的block,和inode。将其全部显示出来。
void showaccess(char strname[20])
{int fi;
fi=Fd_dirfile(strname);//查找该文件夹下是否有文件
if(fi==-1)
{printf(“该文件夹下没有 %s 文件或文件夹\n”,strname);
return ; }
inodetemp=read_inode(fi);
printf(“—%s—属性\n”,strname);
if((inodetemp->di_mode&DIMODE_SYSTEM)==DIMODE_SYSTEM)
{printf(“系统文件\n”);
}
if((inodetemp->di_mode&DIMODE_FILE)==DIMODE_FILE)
printf(“文本文件\n”);
if((inodetemp->di_mode&DIMODE_DIR)==DIMODE_DIR)
printf(“文件夹\n”);
printf(“占据inode %d,block %d\n”,inodetemp->di_ino,inodetemp->di_block[0]);
if(inodetemp->di_gid==0)
printf(“由%s创建,属于管理员组\n”,pwd[inodetemp->di_uid-1].username);
else if(inodetemp->di_gid==1)
printf(“由%s创建,属于普通用户组\n”,pwd[inodetemp->di_uid-1].username);}
3.9 del 删除文件或目录
查找当前目录是否有该文件名,没有则退出,有则调用access()判断是否有权限,有则判断是否为系统文件,是则无法删除,不是则判断是否是文件,是文件则直接删除,不是则判断是否文件夹,是文件夹则判断该文件夹下是否有文件,有文件则无法删除。提示用户是否删除,确认则删除文件,修改当前文件夹inode,block结构,修改该文件占有的inode和block位图为0,修改超级块,写入模拟硬盘。流程图3.9

    Deletefd 流程图3.9

4 程序运行结果
1格式化 和登录界面 登录后显示帮助信息 ,进入到用户文件夹下

2 dir命令—显示当前目录下的文件和目录

3 create 命令—创建一个文本文件 以###结束

4 read 命令—显示txt文件

5 edit命令—在文本文件后追加文本

6 cdir命令—创建目录

7 cd命令—进入某个子目录 cd .. 进入上级目录

8 rename—重命名 如果当前目录下有同名的,则命名失败

9 del—删除文件或目录 如果该目录下有文件则删除失败

10 bit—显示inode block的占用情况

5心得体会

参考文献

[1] 袁庆龙,候文义.Ni-P合金镀层组织形貌及显微硬度研究[J].太原理工大学学报,2001,32(1):51-53.(连续出版物:[序号] 主要责任者.文献题名[J].刊名,出版年份,卷号(期号):起止页码)
[2] 刘国钧,王连成.图书馆史研究[M].北京:高等教育出版社,1979:15-18,31.(专著:[序号] 主要责任者.文献题名[M].出版地:出版者,出版年:起止页码.)
[3] 孙品一.高校学报编辑工作现代化特征[C].中国高等学校自然科学学报研究会.科技编辑学论文集(2).北京:北京师范大学出版社,1998:10-22.(论文集:[序号] 主要责任者.文献题名[C]∥主编.论文集名.出版地:出版者,出版年:起止页码.)

你可能感兴趣的:(java多线程下载课程设计)