河南师范大学计算机科学与技术专业本科毕业论文.doc
《河南师范大学计算机科学与技术专业本科毕业论文.doc》由会员分享,可在线阅读,更多相关《河南师范大学计算机科学与技术专业本科毕业论文.doc(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、河南师范大学本科毕业论文 学号: 0928524059基于Mina框架的Java通讯层应用学院名称: 软件学院 专业名称: 计算机科学与技术 年级班别: 2009级Java班 姓 名: 指导教师: 教授 2013年05月基于Mina框架的Java通讯层应用 摘 要 Apache Mina Server是一个网络通信应用框架,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供JAVA对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异步(Mina 的异步IO 默认使用的是JAVA NIO 作为
2、底层支持)操作的编程模型。随着网络通信的不断增加,用户对于服务器通讯层的要求也越来越高。如何提高服务器端程序的性能,如何使用一种高效的I/O底层,从而更容易地开发出高性能的网络应用程序,成为近年来通讯层研究的主要课题。通过对比,基于Mhm(Minimum hardware modificatio)框架的通讯层具有实现简单,性能高效的特点,是Java通讯层应用的推荐框架.关键词 Mina;Java; Mhm;IO;NIO;Socket;ServerSocket; TCP/IP; IoAcceptor ;IoConnector; BufferedReader;Buffer;Charset;Chan
3、nels;Selector;J2EE;MyEclipse;Enterprise ;JavaBeans; MinaServeBased on the the Mina Framework of Java Communication Layer ApplicationsAbstract Apache Mina Server is a network communication application framework, it is primarily a communication framework based on TCP / IP, UDP / IP protocol stack (of
4、course, also can provide Java object serialization, the virtual machine pipe communication services), Mina canhelp us to quickly develop high-performance, highly scalable network communications applications, Mina provides event-driven, asynchronous (asynchronous IO Minas default is to use programmin
5、g model the Java NIO as the underlying support) operation. With the continuous increase in network traffic, users are increasingly high requirements for the server communication layer. Therefore, how to improve the performance of the server-side program, how to use a highly efficient I / O low-level
6、, making it easier to develop a high-performance network applications become the main topic of the communication layer in recent years. Mhm (Minimum hardware modification ) framework-based communication layer has a simple, efficient performance, by contrast, is the the Java communication layer appli
7、cations recommended framework.Keywords Mina;Java; Mhm;IO;NIO;Socket;ServerSocket; TCP/IP; IoAcceptor ;IoConnector; BufferedReader;Buffer;Charset;Channels;Selector;J2EE;MyEclipse;Enterprise ;JavaBeans; MinaServe。目 录前 言31运用socket实现通信的方式与关键技术31.1 通过JAVA的Socket阻塞方式实现通信3 1.1.1 阻塞通信的服务器端41.1.2 阻塞通信的客户端41.
8、2 通过JAVA的Socket非阻塞方式实现通信41.3 TCP/IP协议41.3.1 Tcp、Ip协议的特点41.3.2 Tcp/Ip数据的传输过程41.3.3 端口号51.4 MINA 架构剖析5662.2 NIO的介绍和新I/O992.2.2 新I/O910103.1.1 J2EE平台10 3.1.2 集成环境11111111121618184.2本聊天室包括服务器和客户端两个部分:194.3具体的使用说明如下:19参考文献20致 谢21前 言 自进入21世纪以来,网络发展异常迅速,电脑走进了普通人的家中,成了我们生活中不可缺少的一部分,随着用户的激增,网络通信的不断增加,用户对于服务器
9、通讯层的要求也越来越高,给现在的服务器端的正常运行带来了很大的压力。因此,如何提高服务器端程序的性能,如何使用一种高效的I/O底层,从而更容易地开发出高性能的网络通信程序,成为近年来通讯层研究的主要课题。本论文通过JAVA的Socket非阻塞方式实现了一个局域网的通信。目前Java构建的网络应用程序框架有多种,较为流行的框架有Grizzly、Netty、QuickServer、xSocket、Mina等,通过对比,基于Mina框架的通讯层具有实现简单,性能高效的特点1,是Java通讯层应用的推荐框架。1运用socket实现通信的方式与关键技术1.1 通过JAVA的Socket非阻塞方式实现通信
10、2 非阻塞式通讯是指可以将通信操作交给特定的通信硬件去完成,而无需等到其完全完成便可以返回。在该通信硬件进行通信操作时,处理机可以同步进行计算操作,实现了计算与通信的重叠,从而提高整个程序的执行效率。但缺点是不易实现。1.2 通过JAVA的Socket阻塞方式实现通信 阻塞式通讯是指在每建立一个Socket连接的同时,创建一个新线程对该Socket避行单独通信34。这种方式编码简单,实现容易,对一定数量的连接性能比较好。但是如果客户端上限很大的情况下,就不能得到及时的响应,且对系统资源是一种浪费。1.2.1 阻塞通信的服务器端服务器,使用ServerSocket监听指定的端口,端口可以随意指定
11、(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。1.2.2 阻塞通信的客户端客户端,使用socket通信对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。1.3 TCP/IP协议1.3.1 Tcp、Ip协议的特点 TCP/IP(Transmission Control Protocol/Internet Protocol)协议不是TCP和IP这两个协
12、议的合称,而是指因特网整个TCP/IP协议族。从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层5。 图一: TCP/IP四层协议的表示方法举例IP协议的作用:第一,它是网络层的协议,提供互联网上数据传输的统一格式。第二,提供不可靠的无连接的服务。第三,定义了互联网上的传输数据的基本单元,提供了供路由选择的信息,没有差错校验和处理的机制。 TCP协议的功能:差错控制可靠性、面向连接、分段(Segment)、端口号。TCP是传输控制协议,是面向连接的提供了一种可靠的传输服务,它用三次握手和滑动窗口机制来保证传输的可靠性,及进行流量控制。1.3.2 Tcp/Ip
13、数据的传输过程 当你把要传送的数据传递给TCP后,TCP把这些信息分成很多个数据包(这种数据包称为TCP分组),每一个分组都包含有一个序号。 接着TCP分组被传递给IP层,IP层把这个TCP分组放在一个IP数据包的数据部分。然后,这个IP数据包被传到目的主机。目的主机上的IP层,把IP数据包的数据部分(即TCP分组)传递给TCP层。TCP接收到分组后,检查数据包的正确性,如果不正确,通知源计算机重新送该IP包。利用分组的序号来将数据按照原来的顺序排列,然后送给应用层。1.3.3 端口号 逻辑意义上的端口,一般是指TCP/IP协议中的端口6,端口号的范围从0到65535,比如用于浏览网页服务的8
14、0端口,用于FTP服务的21端口等等。 服务器一般都是通过知名端口号来识别的。例如,对于每个TCP/IP实现来说,FTP服务器的TCP端口号都是21,每个Telnet服务器的TCP端口号都是23,每个TFTP(简单文件传送协议)服务器的UDP端口号都是69。任何TCP/IP实现所提供的服务都用知名的11023之间的端口号。这些知名端口号由Internet号分配机构(Internet Assigned Numbers Authority,IANA)来管理。 1.4 MINA 架构剖析 MINA (Multipurpose Infrastructure for Network Applicatio
15、ns)是Apache 软件组织开发的一种作为基于NIO的一个多功能网络应用程序框架,使用Java 技术实现,可以帮助用户快速构建稳定、高性能的网络应用程序。该框架的主要特点有:基于Java NIO设计。巧妙地采用松耦合架构;可灵活地加载过滤器机制;单元测试更容易实现;可自定义线程的数量,以提高运行于多处理器上的性能 采用回调的方式完成调用线程的使用更容易7。通过Java 异步输入输出(NIO)8技术,可以方便的支持TCP/UDP 协议;灵活、可配置的线程模型,这对于网络通信程序来说尤其重要, 用户可以根据实际需要选择符合自身的线程模型;多编码方式支持,既可以使用字节流或者文本,也可以使用其它编
16、码方式,如ASN.1 编码等。MINA 框架的系统结构如图二 所示。图二:MINA系统机构示意图MINA 框架主要由I/O 服务管理(IoService)、I/O 过滤器链(IoFilterChain)、I/O 处理器(IoHandler)和I/O 会话管理(IoSession)等模块组成。IoService 负责与远端客户进行通信底层操作,远端发送的数据首先由IoService 接收并转化为系统内部可识别的事件, 它的两个实现类IoAcceptor 和IoConnector 分别对应服务器端和客户端的I/O 服务管理类; 然后,IoFilterChain 接收由IoService 转化的事件
17、,并使用链中包含的过滤器(IoFilter)进行处理,如日志记录、编码/解码、压缩和黑名单过滤等;最后,IoHandler负责处理由过滤器链处理后的事件, 业务逻辑大多在本模块中实现。处理完后,由IoSession 负责与远端客户进行交互,即使用IoSession 向远端发送的消息,该消息的发送顺序与接收的处理顺序刚好相反9(如图二)。Mina提供了时间驱动和异步操作的编程模型。当前发行的Mhm版本支持基于Java NIO技术的TCPUDP应用程序开发、串口通讯程序,且Mina所支持的功能也在进一步的扩展中。因此,在Java应用程序中使用Mhm框架可以不用考虑底层I0实现以及线程并发等复杂工作
18、,使开发人员能够将更多的精力投入到业务逻辑和开发中,故被广泛采用10。在介绍NIO之前,有必要了解传统的I/O操作的方式。以网络应用为例,传统方式需要监听一个ServerSocket,接受请求的连接为其提供服务(服务通常包括了处理请求并发送响应)图一是服务器的生命周期图,其中标有粗黑线条的部分表明会发生I/O阻塞。图三可以分析创建服务器的每个具体步骤。(1)首先创建ServerSocketServerSocket server=new ServerSocket(10000);(2)然后接受新的连接请求 Socket newConnection=server.accept(); 对于accept
19、方法的调用将造成阻塞,直到ServerSocket接受到一个连接请求为止。一旦连接请求被接受,服务器可以读客户socket中的请求。InputStream in = newConnection.getInputStream();InputStreamReader reader = new InputStreamReader(in);BufferedReader buffer = new BufferedReader(reader);Request request = new Request();while(!request.isComplete() String line = buffer.r
20、eadLine();request.addLine(line); 这样的操作有两个问题,首先BufferedReader类的readLine()方法在其缓冲区未满时会造成线程阻塞,只有一定数据填满了缓冲区或者客户关闭了套接字,方法才会返回。其次,它回产生大量的垃圾,BufferedReader创建了缓冲区来从客户套接字读入数据,但是同样创建了一些字符串存储这些数据。虽然BufferedReader内部提供了StringBuffer处理这一问题,但是所有的String很快变成了垃圾需要回收。同样的问题在发送响应代码中也存在:Response response = request.generate
21、Response();OutputStream out = newConnection.getOutputStream();InputStream in = response.getInputStream();int ch;while(-1 != (ch = in.read() out.write(ch);newConnection.close(); 类似的,读写操作被阻塞而且向流中一次写入一个字符会造成效率低下,所以应该使用缓冲区,但是一旦使用缓冲,流又会产生更多的垃圾。传统的解决方法通常在Java中处理阻塞I/O要用到线程(大量的线程(Thread))。一般是实现一个线程池用来处理请求,如
22、图四:图四 线程使得服务器可以处理多个连接,但是它们也同样引发了许多问题。每个线程拥有自己的栈空间并且占用一些CPU时间,耗费很大,而且很多时间是浪费在阻塞的I/O操作上,没有有效的利用CPU。2.2 NIO的介绍和新I/O Java具有安全性、简易性、健壮性以及平台无关性等特点,但用Java平台编写的Socket系统,在多客户端服务器模式下,易受到大置线程开销的影响,这样既导致了性能问题又缺乏可伸缩性。为解决这个问题,Java平台的制订者引入了非阻塞I/O机制11。 NIO的非阻塞I/O机制的核心思想是多路复用,即将事物多路分离并分派到各自相应的事件处理程序中去它主要是围绕选择器和通道构建的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 河南 师范大学 计算机科学 技术 专业本科 毕业论文
限制150内