基于NIO框架的TeeTime信息平台的设计与实现
摘要:java在网络应用开发中使用非常广泛,在当前web2.0时代更加强调应用和客户的互动性,对网络服务器的并发处理能力提出了新的需求。但采用java传统的服务器通信技术的网络应用程序并发处理能力低下,所以,研发出一套新的java网络通信开发框架尤为必要。本文一开始对阻塞i/o技术做了详尽的分析,在研究和学习jdk 1.4提出的nio技术的基础上,应用基于java nio的服务器通信框架:反应器模型和阿帕奇的mina开源框架,设计了信息平台的数据通讯模块最后,通过并发性能测试得出的数据比对,本文研究与设计的teetime服务平台的数据通信模块稳定并且高效。
关键词:网络应用;nio;reactor;mina
中图分类号:tp311.52 文献标识码:a 文章编号:1007-9599 (2013) 03-0000-02
1 传统的javai/0
1.1 客户端服务器模型
传统的java网络i/o通讯中应用最多的开发模型是客户端-服务器模型。在这个模型中,一个server和一个或多个client构成一个网络应用。server端指的是运行在高性能的机器上为客户端提供服务的一端,而client端指的是运行在性能一般的家用pc机上,向服务器发出请求的一端[1]。例如,在internet上,web是最为常见的客户端-服务器模型,web服务器(例如apache)需要运行在客户端上的程序(如firefox)发送请求,数据信息通常存储在web服务器上,在client有请求到来时,传递给客户端。事务在客户端-服务器模型的日常交互中是最基本操作。一个事务通常是由四个步骤组成:第一步:一个事物的发起通常是当client需要某些服务时,主动向server端口发送请求数据,这样就发起了一个事物。第二步:请求到达服务器后,根据请求的内容作出相应的动作来处理。第三步:server给client发送一个响应,完成这个事物,继续等待下一个request。第四步:客户端接收到请求,根据请求的内容作出相应的处理。
1.2 流i/o技术
流i/o技术是一种面向字节的网络i/o技术。这种技术在并发量不是很大的情况下,开发比较简单。当在高并发的应用场景下,有两个比较明显的性能缺陷:reactor线程模型的特点1.流i/o技术是面向字节的,每
次冲输入输出流一个字节地读取或写入,以这种方式进行读写的速度会比较慢。2.流i/o技术i/o操作会阻塞线程,在数据读取或写入完毕之前,每一次读写操作都会阻塞一个线程。这意味着如果由于网络连接繁忙等原因数据不能立即被读取或者写入字节,jvm就会挂起这个线程,一直处于等待的状态,直到流再次可用为止。
2 nio技术
2.1 nio中的关键概念
在jdkl.4提出的新特性中,nio技术的提出是最大的亮点。与传统的流i/o技术相比,nio主要带来了两点改进:
(1)弥补了原来的i/o的不足,提供了面向块的、非阻塞的i/o处理能力[2]。
(2)使得java应用程序能够更加充分地发挥操作系统的性能,进行高性能的i/o操作。通道、缓冲区和选择器是nio中三个最为关键的内容[3]。
缓冲区是一个数据容器,缓冲区对象由一个用来存储数据的数组和一系列控制数据读写的属
性组成。在nio技术中,所有数据的传输都是通过缓冲区来完成的,这体现了与流i/o技术的一点主要的不同。
所有数据都是冲缓冲区中读出和写入的。而通过通道(channel),可以进行数据的传送。在传送数据时,将要传输的数据写入通道锁包含的缓冲区数组中[5]。在读出数据时,冲通道的缓冲区数组中读出。与流相比,最大的不同在于通道时双向传输的,这样的设计更能充分地利用操作系统的性能。
选择器selector是多个通道对象的多路复用器,是nio技术的关键所在。通过selector提供的注册和监听事件的功能,使得一个线程可以同时管理多个连接成为可能[6]。open方法是selector对象中的静态方法,调用此方法可以使用系统默认的提供程序来创建一个选择器对象。选择器通过监听注册到其上面的channel的selectionkey对象的状态来管理通道。
3 reactor模型
在客户端-服务器模型中,通常的做法是为每一个连接开辟一个线程来单独处理,这样的处理方式照成了很多系统性能的浪费。而nio技术的出现使得在java网络应用领域构建reactor模型
成为可能。reactor模型最基本的思想是反应-触发,将i/o操作与业务逻辑处理进行分离。只有i/o操作准备完成时,才通知相应的程序段进行i/o读写。
4 票务信息平台主要功能设计
网讯票网一期建设的总体目标是:搭建一条由球场管理系统到票网teetime数据库的底层数据传输通道,通过该通道,票网前端可以实时访问到来自球场的teetime数据,同时对teetime的预定信息也可以通过该通道更新到球场的数据库。该通道前端对客户需要暴露一组比较通用的api提供外部获取teetime数据,通道后端应该不依赖与某一特定的球场系统,而是形成一套具备行业普遍标准的接口同外界进行交互。
以前球场的teetime信息是不能实时发布到互联网供客户选择购买的,高球客户若想打球,必须先联系球场,由球场方查询是否有客户所需的场地及时间,并根据客户最终确认的情况来对空闲的teetime进行预约,这种方式一方面在球场预定的环节花费了大量的时间,同时也没有办法将球场的空闲teetime进行最有效的利用,往往一个teetime如果被一个客户预定了,在很长的一段时间内都不能被另外的客户所预定,假如这个客户最终因为某种原因未能到场消费,那么这个teetime便不能及时的告知到最需要这个teetime的客户那里,这样就对球场
造成了teetime的浪费。网讯票网平台旨在整合球场teetime,做到实时发布teetime的最新信息,一方面让客户以最迅捷最方便的方式查询到当前可用teetime信息,另一方面也让球场能够以最快的方式了解自己teetime的预定和执行情况,大大的提高球场teetime的销售效率。
teetime服务平台一期主要致力于解决下面两个方面的问题:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论