- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于NIO高并发网络服务器模型研究与设计
基于NIO高并发网络服务器模型研究与设计
[摘要]随着J2EE技术在企业级平台系统中的广泛应用,用户对基于JAVA的网络服务器程序的性能与扩展性提出更高的要求。围绕服务器模型中高效NIO实现与高扩展性架构两方面介绍一个网络应用服务器模型,结合实际应用环境对这种模型的特点及优越性进行说明,并指出进一步的研究方向。
[关键词]JAVA NIO 业务扩展
中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)0910012-02
一、引言
J2EE是一种利用Java2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。在保留现存的IT资产,快速开发以及支持异构环境等因素的考虑下,众多大型企业的企业级应用均采用J2EE技术。在大型的企业架构中,基于客户/服务器模式所设计的服务器程序由于能为客户提供一些特定的服务而得到了普遍的应用,这种服务器程序的核心技术是并发技术,服务器需要同时对多个客户请求提供服务[1],为每个连接的客户都分配一个线程来处理输入输出,其线程与客户机之比几乎为1:1,因此,应用服务器易受到大量线程开销的影响,导致了性能低下又缺乏可伸缩性。为了解决这个问题,java平台的开发者引入了非阻塞I/O机制(NIO)[2]。NIO与IO包提供的阻塞模型不同,NIO在对一个非阻塞的连接进行操作时,调用会立即返回,而不是挂起等待,这就使得一个线程管理多个连接成为可能,从而使资源使用率得到很大的提升[3]。
在满足高性能需求同时,企业还要求服务器端平台能提供可伸缩性来满足大量的新客户,为了解决当前企业应用的迫切需求,我们需要一种基于NIO技术的兼顾高效并发与业务扩展两方面的服务器模型。
二、研究现状
JDK1.4提供的无阻塞I/O(NIO)有效解决了多线程服务器存在的线程开销问题,在NIO中使用多线程,主要目的已不是为了应对每个客户端请求而分配独立的服务线程,而是通过多线程充分利用多个CPU的处理能力,减少处理时间,达到提高服务能力的目的。许多基于NIO的多线程服务器程序往往直接用基于选择器(Selector)的Reactor模式实现,这种简单的事件机制对于较复杂的服务器应用,显然缺乏扩展性和可维护性,而且缺乏直观清晰的结构层次[4]。
文献[4]针对上述问题提出了基于事件回调思想下的NIO多线程服务器,但该服务器设计的运行时Socket分发机制无法正常的对SocketChannel
(套接字通道)进行处理。文献[4]设计将新接收的客户端通道放在连接接收线程中进行select,当客户端有数据到达时,socket被分配给了处理线程。在任意给定时刻最多只能有一个线程对SocketChannel进行读取和写入操作[5],而客户端数据到达时连接接收线程仍然在对SocketChannel进行select,导致了连接接收线程与处理线程对客户端SocketChannel的访问发生冲突。本文提出的使用多线程套接字分发机制的改良NIO模型很好地解决上述诸多问题。
在具备清晰的层次与高效的性能的同时,服务器的运算逻辑组织方式是决定服务器扩展性的主要因素。例如一个网络服务器需要向手持PDA终端提供采集数据处理服务,当出现不同接口协议的PDA终端时,服务器必须对新协议进行支持。在服务器开发设计过程中往往只重视服务器的性能而忽视了服务器的再编程能力,这导致某一种特殊应用的网络服务器扩展性较低或是扩展难度较大。本文使用改良NIO模型的事件回调机制为接口,以NIO模型的线程池业务数据扩展框架的运行载体,构建了一个网络应用服务器模型,提供了一个具备高效性与扩展性的服务器开发模型解决方案。
三、多线程套接字分发NIO模型
多线程套接字分发NIO模型是本文网络服务器架构中的通信层与事件接口层模型,也是数据处理层的基础,向数据层提供了事件回调接口以及TCP数据发送接口。
(一)模型结构
如图1所示,NIO模型基本可分为以下模块:
1.通讯层
客户端代理(TcpClient/TcpClientPool):Tcp客户端在服务器端的镜像,包含了该客户端链路的所有信息,并提供了数据发送的方法。客户端代理主要包括套接字通道与输入缓冲区,缓冲区大小是应用需求而定。
连接接收器(TcpAcceptor):负责启动服务器的端口监听,并且对生成的监听套接字进行select,接收新连接。
链路处理器(TcpProcessor/TcpProessorPool):负责处理已分配的链路事件,驱动事件接口进行业务运算。服务器将根据链路处理器数量均匀分配客户端代理,通过实现定义的链路处理器池(Tcp
文档评论(0)