软件工程毕业论文

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本科生毕业论文
题目:分布式网络中的推送系统的设计与实现
院系:软件学院
专业:软件工程(计算机应用方向)
学生:
学号
指导教师:明志(副教授)
(职称)
二〇一五年三月
摘要
随着互联网计算机技术的飞速发展,网络已经成了大众生活必不可少的部分,它的最大优点就是可以将大量的信息互相共享。

不管是移动终端还是个人电脑,人们总是可以通过设备进入互联网中获得自己感兴趣的信息。

但与此同时,由于互联网是属于大家的,具有很强的开放性,使得网络上的信息每天都在呈爆炸式地增长,信息的泛滥而引起网民难以消化的现象已经不再是新鲜事。

在当今这个步伐急促的社会中,要想通过普通浏览的方式在信息海洋中找到自己所需要的容确实不是一件轻松的事,普通的浏览查找在当今已经可以说得上是一种既消耗精力又浪费时间的信息获取方式,在注重用户体验的今天,它已经很难达用户满意程度。

为了给各位网民带来具有针对性的个性化服务,将方便快捷的体验带给网民,信息推送技术(PUSH)应运而生。

有了PUSH技术,用户再也不用手动地在互联网上查找自己想要的信息,而只需设置订阅自己所感兴趣的容,PUSH系统就会定期地向用户推送相关消息,整个过程中用户处于被动状态,省去了手动查找等繁杂步骤,大大提高了用户的体验质量。

因此,推送技术已经在近些年中得到了巨大的发展和推广,尤其是在当今分布式主流的网络中,一个好的推送系统会给成千上万的用户带来便利,也给了各个消息发送方带来了推广渠道。

通过推送系统,各个组织可以把自己的新闻消息推送到特定用户的设备中,形成了定向传送的局面,双方的需求都得到了满足,并且还有了效率的保证。

关键词:信息获取,推送技术,个性化
Abstract
With the rapid development of the technology in internet and computer field, network has become the indispensable part of the public life. Its most important advantage is the capacity of sharing lots of message. With mobile terminal or pc, people can easily connect to the internet to get the message he/she like.
But in the same time, since the internet belongs to ourselves, it is so open that the messages in internet are increasing rapidly everyday. It is no more a news that netizen can not digest soon because of the message overflow. In this hurried society, it is not an easy thing to find the message we want in the data ocean by ordinary browsing. Nowaday the ordinary browsing way is time-wasted and vigor-wasted to get message. From point view of paying attention to customer experience, it can hardly make the customer satisfied.
To give the netizen individual and convenient experience, the message push technology occurs. With the push technology, customers no more need to find the message manually. They just need to setup the content they interest in, and the push system will push the relevant message to the customer. The customers are in passive state all the time without the manual checking, and the customer experience is enhancing largely.
So the push technology has been popularized and developed largely these years, especially in the distributed network. An excellent push system can bring convenience to customers and provide more spread way to the pushers. With the push system, an organization can send their news to the specific customers. It satisfy the pushers and recievers in the same time and guarantee the efficiency.
Keywords: obtain message, push technology, individuation
目录
第一章前言 (1)
1.1 背景现状分析 (1)
1.2 推送系统概述 (2)
1.3 论文结构简介 (3)
第二章技术与原理 (4)
2.1 推送基本原理 (4)
2.2 PUSH技术优缺点分析 (6)
2.3 JAVA网络编程 (8)
2.4 JAVA数据库编程 (14)
2.4.1 JDBC简介 (14)
2.4.2 JAVA数据库操作 (15)
2.5 XMPP协议介绍 (21)
第三章架构设计 (23)
3.1 系统架构及原理 (23)
3.2 业务用例的实现 (24)
3.3 数据库设计 (27)
3.3.1 构建数据库的系统流程 (28)
3.3.2 表的具体设计 (29)
第四章模块设计 (33)
4.1 ConnectionPool类介绍 (33)
4.2 Cache类介绍 (47)
4.3 OnlineManager类介绍 (54)
4.4 Loger类介绍 (60)
第五章部署应用 (65)
5.1 运行环境 (65)
5.2 使用说明 (66)
第六章结论 (71)
6.1 工作总结 (71)
6.2 工作展望 (72)
致谢 (74)
参考文献 (75)
第一章前言
1.1 背景现状分析
Pull与Push技术对用户来说都是信息获取方式,但却是两种截然相反的信息获取技术。

Pull为信息拉取技术,在信息获取时,用户必须时时处于主动地位,并且参与信息获取整个过程;Push技术为信息推送技术,服务器处于主动地位,用户处于被动地位。

通常情况下,人们都是采用“Pull”方式从网络上“拉取”信息,即利用搜索引擎来获取信息的方式。

随着网络上信息资源的日益丰富,基于Pull技术的信息获取技术无论在信息的搜索速度、传输速度,还是搜索信息的质量上都越来越难以令人满意。

这是由于Pull技术自身存在的不足造成的。

一是以Pull 方式获取信息不仅时间长,而且费用高。

Pull技术是通过URL来进行信息资源定位的。

人们上网获取信息时,必须首先利用各种搜索引擎去查找各个服务器在网上的URL,然后再通过URL去访问该服务器,定位、浏览、选择自己所需的信息资源。

这样人们查询一次信息,必须长时间地频繁登录多个服务器,因而不仅时间长,而且费用高。

二是信息效率低,资源浪费严重。

从网络技术上讲,Pull 技术是一种点到点的传输方式,当多个用户需要一条信息时,该信息就必须重复传输多次,因此严重地浪费了网络带宽和服务器资源。

三是服务器被动服务,用户获取信息及时性差。

Pull方式获取信息时,用户是主动的,服务器和信息是被动的,也就是说,用户必须主动到服务器上寻找信息,这就是人们通常所说的“人找信息”。

另外,这种方式客户机和服务器必须保持实时的连接才能获取信
息。

但由于网络信息更新快,这就要求用户必须经常上网查看信息,否则很难及时获得自己所需的最新信息。

简单地说,Internet发展到今天的规模,网上具有海量信息,这种依靠被动“拉取”信息的服务方式,在时间延迟、查全率、查准率、响应时间等方面都不能满足用户的需求,可以说,以Pull技术为代表的信息获取模式已成为信息共享的瓶颈。

Pull与Push技术对用户来说都是信息获取技术,但二者存在着根本的不同。

以Pull技术为核心的信息拉取技术,在信息获取时,用户必须时时处于主动地位,也就是说,用户必须参与信息获取的整个过程。

而以Push技术为核心的信息推送技术,在信息推送过程中,服务器始终处于主动地位,用户却处于被动地位。

与Pull技术相比,Push技术不仅获取信息的效率高,费用低,而且及时性强,因而它一出现便受到人们的青睐。

Push技术能够通过一定的技术标准或协议,把用户感兴趣的信息,按照用户的要求及时、主动地推送给用户。

用户收到信息后,还可以离线浏览。

信息推送技术将深刻地改变网络信息的传播方式,使用户不必“大海捞针”式地搜集信息,而由服务器主动、及时地把用户感兴趣的信息推送给用户,用户可以“以逸待劳”地坐等信息到来。

1.2 推送系统概述
随着互联网越来越深入人心,网络容量和浏览人数都以惊人的速度增长着。

当人们上网浏览资讯,面临着数以百万计的网页,他们就更需要一种简便快速的方法找到他们所需要的信息容。

毫无疑问,推送系统将是一个很好的选择,通过
这类系统,用户可以全面、及时、准确的获得个人感兴趣的容。

我们来打个比方,推送系统好比一个传递信息中间者,它的一边是发布方,一边是接受方,一旦发布方有了新的推送消息,它就立即将信息传递到特定的接收方当中,将原来复杂繁琐的步骤最简化,以提高信息分享的效率。

在推送系统的面前,人们只需要做这几件事,假如你是一个网民,你只需要订阅好你所感兴趣的容,然后就可以悠哉的等待最新信息的到来,想接受什么消息和拒绝接受什么消息完全由用户来决定,以此体现了个性化的用户体验;接入你是一个组织,你想要发布一些消息(如新闻、通知等),你只需要填写好消息的容,推送系统的服务器就会自动地将消息转发推送到被订阅的用户去,不必担心用户因为不在线而因此的消息推送失败,对于没在线的用户,服务器会将消息保存下来,等待用户下一次上线再推送,整个过程方便保险。

1.3 论文结构简介
本论文各章节容安排如下:
第一章作为本论文的绪论,主要论述了消息推送技术的背景现况、推送系统的概述,并简要介绍了本文的结构。

第二章会把实现系统的技术原理进行详细的阐述,比如如何实现推送功能、如何对在线用户进行管理、如何将信息中转保存等等关键技术问题,也会讨论到系统的运行机制和一些用到的关键算法。

第三章主要讲述整个推送系统的框架设计,该章首先会对系统进行一个整体化的分析论述,整体论述后还会对系统的各大模块进行功能性的介绍,并分析其在整个系统中的重要性以及各个模块之间是如何衔接起来支撑整个系统。

第四章将会深入分析各个模块的设计实现过程,剖析各模块的部结构,也讲述到实现过程中要注意的细节以及如何对模块进行优化以保证系统的运行效率。

第五章主要对消息推送系统的设计实现进行一个整体总结,并且提出本次实践当中存在的一些局限性和有待改进的地方。

第二章技术与原理
2.1 推送基本原理
尽管在定义上Push方式的消息推送是由服务器占有主动权,终端用户处于被动状态,但其实技术实现的背后还是基于“请求——响应”模式,在这模式上做了一定修改。

终端用户一旦设置好自己的订阅容,就不停“隐蔽”地向服务器发送请求,而一旦服务器发现有新的消息需要推送,就给终端返回推送消息,以此实现了推送的效果。

在这里主要涉及到两个方面,一个是轮询时间,它代表着终端访问服务器的时间间隔;另一个是服务器的请求处理方式,接收到来自终端的请求后,服务器可以选择挂起连接或者马上返回消息给用户。

根据轮询时间、请求处理方式,分为以下两种Push。

简单轮询:
客户端一般以定时方式发起请求,服务端处理后返回响应。

图2.1 简单轮询原理
特点:
原理、客户端/服务端实现简单
可根据应用场景调整轮询时间间隔
服务端需要处理大量请求
长轮询:
客户端发起请求后服务端将该请求挂起(不返回响应),直到超时、异常或需要处理响应(推容)才返回。

客户端收到响应后再次请求(即轮询)服务端,并处理响应。

图2.1.2 长轮询原理
特点:
实时性高
服务端需要管理挂起请求
2.2 PUSH技术优缺点分析
Push技术作为一种网络信息获取技术是成功的,它的好处可概括为:
●可以避免用户在网上无目的上网查找,利用离线浏览技术使用户可采用
离线方式进行阅读。

●可以提高被推送信息的准确性,控制搜索深度,过滤不必要的信息。

●能被推送的信息容有教学资料、新闻、电影、音乐、房产信息、股市行
情、共享软件、天气预报等。

●能被推送的文件有文字、图形、图像、声音、小程序等,并且可以超文
本或通过超文本访问的文件的形式保存在用户的硬盘上。

●可以推送通过专用的播放程序实时显示的信息,向用户提供多媒体信息。

●Push服务器能对各个用户的兴趣和偏好进行智能性识别、预测,根据用
户要求自动搜集定制信息并定期快速、连续不断地向目标用户主动推送,满足了用户的个性化需求。

但同时也存在很多需要完善的地方:
●难以满足用户个性化的要求。

Push技术是按照预先确定的一系列标准来传送
信息的,这种标准是建立在发送方和接收方之间的协议上,而不是以用户需求为基础的。

多数Push产品针对性较差,满足个性化程度不高,这在覆盖推送中表现尤为突出。

●未能解决信息过载问题。

Push技术本来是为了解决因特网上信息过载而出现
的新技术,然而结果事与愿违。

如果Push产品大量使用,反而会加重网络信息过载。

●数据风暴问题。

“推送技术”与过去常用的“拉取技术”的显著不同是:拉
取是由用户来控制信息的检索与获取,用户是主动的。

而推送技术则考虑由其他方来控制信息的传送。

当信息提供商将大量信息强制性地推向用户时,便会将用户淹没于“信息垃圾”中。

●网络带宽浪费问题。

Push技术为网络带来新的服务模型的同时也引起了带宽
浪费问题,这主要是由Push服务器主动发送大量信息或客户代理自动进行
站点搜索所造成的。

因此,Push产品必须考虑如何有效地利用带宽,这将是决定该项技术前景的关键。

2.3 JAVA网络编程
本推送系统主要使用java语言实现,因此java的网络编程在本项目中占有很大比重,而网络编程本来就是开发者的必备技术之一,接下来本节会简单介绍一下网络编程以及java本身网络编程的一些技巧。

从通俗的角度上来说,网络编程就是指通过程序将数据从一台网络设备上传输到另一台设备之中去,而上述所说的程序实际上就是指服务程序和客户端,每一次的数据连接都是由一方提出请求,等另一方确认接受之后才会得以进行,并且客户端程序就是提出请求的一方,服务器就是被请求然后确认接受的一方。

在讲解网络传送的原理之前,我们需要理解两个概念,一个是IP地址,一个是端口号。

IP地址是一个32位的二进制序列,通常被分割成四个八位的二进制数,它好比是一台的,用来识别出互联网中的唯一设备,正是有了这个唯一的标识,我们才可以在千千万万台设备中将数据方便快捷的传输到我们的目的主机中去。

而端口号是用来识别数一台主机中的一个服务,也就是一个程序,每个程序都有自己的端口号,知道了端口号之后数据达到主机后就可以根据端口号分配到目的程序中去,以保证数据不会被其它服务所接收。

所以,通过IP地址/端口号,我们就可以识别出网络中的唯一服务,实现双方的连接和数据的传送。

尽管数据的传送是建立在IP地址/端口号对之上,但传送的方式根据其机制
的不同也分为多种,而当今网络连接协议主要分为两大类:TCP协议以及UDP协议。

TCP是一种面向连接的协议,言下之意就是在数据传送之前设备之间必须先建立好可靠安全的连接,而每一次的连接必须双方完成了“三次握手”之后才能得以进行,即双方事前必须经过三重确认后才可以传输数据。

另外,TCP连接是一种安全的连接,它保证数据一定会传送到目的地,如果数据在传输过程中意外丢失,它会通过一系列的机制进行重发,并且设有阻塞机制以保证网络的稳定性,常见的TCP协议有HTTP协议、FTP协议等等。

UDP是一种无连接协议,即在传送数据之前并不需要建立一个传输通道,而是从程序中获取到所要发送的数据,随后将之“扔”到网络中,整个过程并不需要维护一个数据的连接状态,它使用的是最大交付方式,即不保证数据能准确地传输到目的程序当中,但因为不设有阻塞机制,因此速度会相对TCP连接快,适用于一些流媒体或语音数据等传输,平时我们使用的“ping”命令就是对目标主机发送UDP协议数据包以测试当前网络是否通行。

简单介绍完一些关于网络编程的概念之后,接下来谈一下现实java网络编程中的实际方法,由于本推送系统使用的是TCP协议,因此下面我们暂时不探讨java网络编程中UDP连接的实现。

在java语言中,对于TCP方式的网络编程提供了良好的支持,在实际实现时,以.Socket类代表客户端连接,以.ServerSocket类代表服务器端连接。

在进行网络编程时,底层网络通讯的细节已经实现了比较高的封装,所以在程序员实际编程时,只需要指定IP地址和端口就可以建立连接了。

正是由于这种高度的封装,一方面简化了Java语言网络编程的难度,另外也使
得使用Java语言进行网络编程时无法深入到网络的底层,所以使用Java语言进行网络底层系统编程很困难,具体点说,Java语言无法实现底层的网络嗅探以及获得IP包结构等信息。

但是由于Java语言的网络编程比较简单,所以还是获得了广泛的使用。

下面分别介绍一下在Java语言中客户端和服务器端的实现步骤。

在客户端网络编程中,首先需要建立连接,在Java API中以.Socket 类的对象代表网络连接,所以建立客户端网络连接,也就是创建Socket类型的对象,该对象代表网络连接,示例如下:
Socket socket1 = new Socket(“192.168.100.100”,10000);
Socket socket2 = new Socket(“.baidu.”,80);
上面的代码中,socket1实现的是连接到IP地址是192.168.100.100的计算机的10000号端口,而socket2实现的是连接到域名是的计算机的80号端口,至于底层网络如何实现建立连接,对于程序员来说是完全透明的。

如果建立连接时,本机网络不通,或服务器端程序未开启,则会抛出异常。

连接一旦建立,则完成了客户端编程的第一步,紧接着的步骤就是按照“请求-响应”模型进行网络数据交换,在Java语言中,数据传输功能由Java IO 实现,也就是说只需要从连接中获得输入流和输出流即可,然后将需要发送的数据写入连接对象的输出流中,在发送完成以后从输入流中读取数据即可。

示例代码如下:
OutputStream os = socket1.getOutputStream(); //获得输出流 InputStream is = socket1.getInputStream(); //获得输入流
上面的代码中,分别从socket1这个连接对象获得了输出流和输入流对象,在整个网络编程中,后续的数据交换就变成了IO操作,也就是遵循“请求-响应”模型的规定,先向输出流中写入数据,这些数据会被系统发送出去,然后在从输入流中读取服务器端的反馈信息,这样就完成了一次数据交换过程,当然这个数据交换过程可以多次进行。

这里获得的只是最基本的输出流和输入流对象,还可以根据前面学习到的IO 知识,使用流的嵌套将这些获得到的基本流对象转换成需要的装饰流对象,从而方便数据的操作。

最后当数据交换完成以后,关闭网络连接,释放网络连接占用的系统端口和存等资源,完成网络操作,示例代码如下:
socket1.close();
介绍完一个简单的客户端编程的示例,下面接着介绍一下TCP类型的服务器端的编写。

首先需要说明的是,客户端的步骤和服务器端的编写步骤不同,所以在学习服务器端编程时注意不要和客户端混淆起来。

在服务器端程序编程中,由于服务器端实现的是被动等待连接,所以服务器端编程的第一个步骤是监听端口,也就是监听是否有客户端连接到达。

实现服务
器端监听的代码为:
ServerSocket ss = new ServerSocket(10000);
该代码实现的功能是监听当前计算机的10000号端口,如果在执行该代码时,10000号端口已经被别的程序占用,那么将抛出异常。

否则将实现监听。

服务器端编程的第二个步骤是获得连接。

该步骤的作用是当有客户端连接到达时,建立一个和客户端连接对应的Socket连接对象,从而释放客户端连接对于服务器端端口的占用。

实现功能就像公司的前台一样,当一个客户到达公司时,会告诉前台我找某某某,然后前台就通知某某某,然后就可以继续接待其它客户了。

通过获得连接,使得客户端的连接在服务器端获得了保持,另外使得服务器端的端口释放出来,可以继续等待其它的客户端连接。

实现获得连接的代码是:
Socket socket = ss.accept();
该代码实现的功能是获得当前连接到服务器端的客户端连接。

需要说明的是accept是一个阻塞方法,也就是当无连接时,该方法将阻塞程序的执行,直到连接到达时才执行该行代码。

另外获得的连接会在服务器端的该端口注册,这样以后就可以通过在服务器端的注册信息直接通信,而注册以后服务器端的端口就被释放出来,又可以继续接受其它的连接了。

连接获得以后,后续的编程就和客户端的网络编程类似了,这里获得的Socket类型的连接就和客户端的网络连接一样了,只是服务器端需要首先读取发送过来的数据,然后进行逻辑处理以后再发送给客户端,也就是交换数据的顺
序和客户端交换数据的步骤刚好相反。

这部分的容和客户端很类似,所以就不重复了。

最后,在服务器端通信完成以后,关闭服务器端连接。

实现的代码为:
ss.close();
综上所述,java网络编程步骤大概可以概括为如下图:
图2.3.1 网络编程流程
2.4 JAVA数据库编程
推送系统服务器可能会面临着大量数据的存储和转发,也会包括一系列的事务操作,因此系统需要数据库的技术支持来保证运作的效率。

本推送系统使用了MYSQL数据库来维护数据,下面会介绍一下JAVA语言中数据库的使用技巧。

2.4.1 JDBC简介
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java 语言编写的类和接口组成。

JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。

换言之,有了JDBC API,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Informix数据库又编写另一个程序等等,程序员只需用JDBC API写一个程序就够了,它可向相应数据库发送SQL调用。

同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势。

Java数据库连接体系结构是用于Java应用程序连接数据库的标准方法。

JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。

作为API,JDBC为程序开发提供标准的接口,并为数据库厂商及第三方中
间件厂商实现与数据库的连接提供了标准方法。

JDBC使用已有的SQL标准并支持与其它数据库连接标准,如ODBC之间的桥接。

JDBC实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的接口。

Java 具有坚固、安全、易于使用、易于理解和可从网络上自动下载等特性,是编写数据库应用程序的杰出语言。

所需要的只是 Java应用程序与各种不同数据库之间进行对话的方法。

而 JDBC 正是作为此种用途的机制。

2.4.2 JAVA数据库操作
由于本系统采用的是MYSQL数据库,所以本节接下来只介绍JAVA语言中MYSQL数据库的使用方法。

首先,我们必须在主机中先安装好MYSQL数据库以及在项目中导入MYSQL 数据库的JDBC驱动包以保证JAVA程序能正常访问数据库,以上操作网上有具体教程,在这里不进行详述。

完成上述两部后,我们就可以使用JDBC提供的API对MYSQL数据库进行操作,操作过程主要分成以下几步:
1、加载合适的JDBC驱动程序
Class.forName(Driver);
MySQL驱动程序:.mysql.jdbc.Driver
Oracle驱动程序:oracle.jdbc.driver.OracleDriver
SQLServer驱动程序:
.Microsoft.jdbc.sqlserver.SQLServerDriver
2、建立数据库连接
与MySQL数据库连接的方法:
Connection con=DriverManager.getConnection(“jdbc:mysql://主机。

相关文档
最新文档