`
hzywy
  • 浏览: 169058 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

tomcat nio

阅读更多

出处:http://hi.baidu.com/iamleafye/blog/item/c5d3b0d00a795389a1ec9c13.html
术语
   Tomcat 6.X实现了JCP的Servlet 2.5和JSP2.1的规范,并且包括其它很多有用的功能,使它成为开发
和部署web应用和web服务的坚实平台。
       NIO (No-blocking I/O)从JDK 1.4起,NIO API作为一个基于缓冲区,并能提供非阻塞I/O操作的API
被引入。


       作为开源web服务器的java实现,tomcat几乎就是web开发者开发、测试的首选,有很多其他商业服务
器的开发者也会优先选择tomcat作为开发时候使用,而在部署的时候,把应用发布在商业服务器上。也有
许多商业应用部署在tomcat上,tomcat承载着其核心的应用。但是很多开发者很迷惑,为什么在自己的应
用里使用tomcat作为平台的时候,而并发用户超过一定数量,服务器就变的非常繁忙,而且很快就出现了
connection refuse的错误。但是很多商业应用部署在tomcat上运行却安然无恙。

      其中有个很大的原因就是,配置良好的tomcat都会使用APR(Apache Portable Runtime),APR是
Apache HTTP Server2.x的核心,它是高度可移植的本地库,它使用高性能的UXIN I/O操作,低性能的
java io操作,但是APR对很多Java开发者而言可能稍稍有点难度,在很多OS平台上,你可能需要重新编
译APR。但是从Tomcat6.0以后, Java开发者很容易就可以是用NIO的技术来提升tomcat的并发处理能力。
但是为什么NIO可以提升tomcat的并发处理能力呢,我们先来看一下java 传统io与 java NIO的差别。
    
Java 传统的IO操作都是阻塞式的(blocking I/O), 如果有socket的编程基础,你会接触过堵塞socket和
非堵塞socket,堵塞socket就是在accept、read、write等IO操作的的时候,如果没有可用符合条件的资
源,不马上返回,一直等待直到有资源为止。而非堵塞socket则是在执行select的时候,当没有资源的时
候堵塞,当有符合资源的时候,返回一个信号,然后程序就可以执行accept、read、write等操作,一般来
说,如果使用堵塞socket,通常我们通常开一个线程accept socket,当读完这次socket请求的时候,开一
个单独的线程处理这个socket请求;如果使用非堵塞socket,通常是只有一个线程,一开始是select状,
当有信号的时候可以通过 可以通过多路复用(Multiplexing)技术传递给一个指定的线程池来处理请求,然
后原来的线程继续select状态。 最简单的多路复用技术可以通过java管道(Pipe)来实现。换句话说,如果
客户端的并发请求很大的时候,我们可以使用少于客户端并发请求的线程数来处理这些请求,而这些来不
及立即处理的请求会被阻塞在java管道或者队列里面,等待线程池的处理。请求 听起来很复杂,在这个架
构当道的java 世界里,现在已经有很多优秀的NIO的架构方便开发者使用,比如Grizzly,Apache Mina等
等,如果你对如何编写高性能的网络服务器有兴趣,你可以研读这些源代码。

      简单说一下,在web服务器上阻塞IO(BIO)与NIO一个比较重要的不同是,我们使用BIO的时候往往会
为每一个web请求引入多线程,每个web请求一个单独的线程,所以并发量一旦上去了,线程数就上去
了,CPU就忙着线程切换,所以BIO不合适高吞吐量、高可伸缩的web服务器;而NIO则是使用单线程(单
个CPU)或者只使用少量的多线程(多CPU)来接受Socket,而由线程池来处理堵塞在pipe或者队列里的请
求.这样的话,只要OS可以接受TCP的连接,web服务器就可以处理该请求。大大提高了web服务器的可
伸缩性。

    我们来看一下配置,你只需要在server.xml里把 HTTP Connector做如下更改,

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    改为
    <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
               connectionTimeout="20000"
               redirectPort="8443" />

然后启动服务器,你会看到org.apache.coyote.http11.Http11NioProtocol start的信息,表示NIO已经启动。其他的配置请参考官方配置文档。

Enjoy it.

最后贴上官方文档上对tomcat的三种Connector的方式做一个简单比较,
   

Java Blocking Connector       Java Nio Blocking Connector       APR Connector
Classname         Http11Protocol                  Http11NioProtocol         Http11AprProtocol
Tomcat Version   3.x 4.x 5.x 6.x                       6.x                     5.5.x 6.x
Support Polling         NO                             YES                        YES
Polling Size           N/A                   Unlimited - Restricted by mem        Unlimited
Read HTTP Request     Blocking                     Blocking                       Blocking
Read HTTP Body        Blocking                     Blocking                       Blocking
Write HTTP Response   Blocking                     Blocking                       Blocking
SSL Support           Java SSL                     Java SSL                       OpenSSL
SSL Handshake         Blocking                     Non blocking                   Blocking
Max Connections       maxThreads                   See polling size               See polling size


<connector redirectport="8443" connectiontimeout="20000" protocol="HTTP/1.1" port="8080"><connector redirectport="8443" connectiontimeout="20000" protocol="org.apache.coyote.http11.Http11NioProtocol" port="8080"></connector></connector>

分享到:
评论

相关推荐

    手写 tomcat nio

    【标题】:“手写 Tomcat NIO” 在深入探讨手写Tomcat NIO之前,我们首先需要理解NIO(Non-blocking I/O)的概念。NIO是Java提供的一个用于替代传统I/O模型(即BIO,Blocking I/O)的库。在BIO中,每个连接都需要一...

    jiajianrong#documents#理解tomcat nio1

    tomcat默认的 HTTP connector 是阻塞的,并且每个连接对应一个线程。这会造成线程资源的浪费,因为连接本身可能不一定频繁被使用,而是仅仅被用来k

    cipher-list-creator.jsp:为 Tomcat NIOBIO 连接器的 server.xml 创建密码列表

    目标环境Tomcat + JDK 使用 NIO/BIO 连接器进行 SSL。 在 Tomcat 7 + Java 7 / Tomcat 8 + Java 8 上测试,但写成 Tomcat 4.1 + JDK1.4.2 兼容。注意密码列表按推荐顺序排序。 接下来 Tomcat 将支持 Tomcat 8.0.21 /...

    3-5Tomcat响应请求源码与nio处理请求源码实现.mp4

    3-5Tomcat响应请求源码与nio处理请求源码实现.mp4

    tomcat8.5.56_X64_nio2模式性能优化版+垃圾处理机制.zip

    【标题】:“Tomcat 8.5.56 X64 NIO2模式性能优化版+垃圾处理机制.zip”指的是一个特别针对Windows x64平台优化的Tomcat 8.5.56版本,该版本集成了NIO2(非阻塞I/O)模式,并对垃圾收集(Garbage Collection, GC)...

    tomcat7.0.69 + nio + redis session共享 配置优化版

    此版本在Tomcat7.0.69 的基础上...2、 启用nio 和 线程池配置 (server.xml) 3、修改了context.xml ,添加redis 支持(注意redis 连接密码) 4、在Root目录添加了test.jsp 用于查看多tomcat集群时sessionId是否一直

    tomcatNIO.zip

    《深入理解Tomcat NIO与Spring Boot集成》 在Java Web开发中,Tomcat作为一款广泛应用的开源HTTP服务器和Servlet容器,其性能优化一直是开发者关注的重点。本项目"tomcatNIO.zip"聚焦于利用非阻塞I/O(Non-blocking...

    从Jetty、Tomcat和Mina中提炼NIO构架网络服务器的经典模式

    Jetty、Tomcat和Mina都是Java领域中著名的Web服务器和应用服务器,它们在NIO架构上有着相似的设计模式。本文将从这三个框架中提炼出NIO构架网络服务器的经典模式,并逐一解析它们的核心机制。 首先,Jetty的NIO实现...

    tomcat:Java使用nio模式实现tomcat

    在Tomcat服务器的实现中,NIO模式被用来提高其性能和并发能力,尤其是在高并发场景下,相比传统的BIO( Blocking I/O)模式,NIO具有显著优势。 Tomcat是Apache软件基金会的Jakarta项目下的一个开源Web应用服务器,...

    tomcat7,tomcat8,tomcat9

    这一版本带来了显著的性能提升,特别是通过NIO2(非阻塞I/O)提供更好的网络通信效率。Tomcat8增强了管理界面,提供了Web管理工具,使得管理应用和服务器更加直观。它还引入了基于Java的管理接口,便于自动化管理。...

    tomcat 7 和 tomcat 8

    3. NIO(非阻塞I/O)改进:Tomcat 7增强了NIO连接器,提高了服务器处理并发请求的能力,提升了性能。 4. 配置简化:引入了web.xml的注解配置,使得部署描述符的编写更为简洁。 5. 新的安全特性:增加了Secure ...

    SpringBoot Tomcat启动实例代码详解

    在Spring Boot应用中,Tomcat是默认的嵌入式服务器,允许我们在不依赖外部服务器的情况下运行和部署Web应用程序。下面是对Spring Boot Tomcat启动实例代码的详细解释。 首先,我们来看核心的`Application`配置类,...

    Tomcat7.0 tomcat最新版本

    8. **NIO和APR连接器**:Tomcat 7.0提供了两种连接器选项,即NIO(非阻塞I/O)和APR(Apache Portable Runtime),用户可以根据需求选择更适合的连接器以优化性能。 9. **错误处理**:Tomcat 7.0改进了错误页面处理...

    tomcat7和8

    2. **NIO和 APR 改进**:在连接器层,Tomcat 7改进了非阻塞I/O(NIO)支持,并且增强了Apache Portable Runtime (APR)库的集成,以提高性能和稳定性。 3. **更好的管理工具**:提供了更强大的管理和监控工具,如`...

    NIOweb服务器

    NIO模型是Tomcat为了应对高并发场景而引入的,它利用Java NIO库进行网络通信,能够有效地减少线程数量,降低内存消耗,提高服务器性能。 在Tomcat中,NIO处理模型的工作流程大致如下: 1. **连接接收**:当客户端...

    tomcat7源码下载

    Tomcat采用NIO(非阻塞I/O)或BIO(阻塞I/O)模型,Coyote连接器负责这部分实现。NIO模型在高并发环境下表现出色,因为它可以处理大量并发连接,而无需为每个连接创建新线程。 四、Tomcat7的部署与管理 Tomcat7...

    tomcat 7 最新版本 apache-tomcat-7.0.109

    3. **NIO连接器**:除了传统的BIO连接器,Tomcat 7引入了基于非阻塞I/O的NIO连接器,允许处理更多并发连接,提升系统吞吐量。 4. **改进的管理工具**:Tomcat 7提供了一个增强的管理界面,用户可以通过Web管理...

    apache-tomcat-8.5.53_tomcat的8.0版本_ApacheTomcat8.5_choiceyqj_

    3. **NIO2和APR**:Tomcat 8.5引入了对Java NIO2的支持,同时保留了对Apache Portable Runtime (APR)的兼容性。这提供了更好的非阻塞I/O性能,适应高并发场景。 4. **更好的日志系统**:根据描述,此版本已经解决了...

    tomcat8.5.59

    3. NIO2改进:Tomcat 8.5优化了网络I/O模型,支持Java 7的NIO2 API,提供更好的异步处理能力,提高了并发性能。 4. WebSocket升级:8.5版本对WebSocket进行了升级,支持JSR 356规范,增强了WebSocket应用程序的开发...

    tomcat 7 8 两个版本

    3. **NIO2**:Tomcat 8引入了Java NIO2 API,提供了更好的非阻塞I/O性能,尤其在高并发场景下。 4. **JASPIC(Java Authentication Service Provider Interface for Containers)**:提供了统一的认证服务提供商接口...

Global site tag (gtag.js) - Google Analytics