NIO,非堵塞IO,通常适用于I/O读写等方面,一般来讲,系统运行的性能瓶颈通常在I/O读写,包括对端口和文件的操作上,过去,在打开一个I/O通道后,read()将一直等待在端口一边读取字节内容,如果没有内容进来,read()就会一直等下去,这会影响程序继续做其他事情,那么改进做法就是开设线程,让线程去等待,但是这样做也是相当耗费资源的。
NIO非堵塞技术实际是采取Reactor模式,或者说是Observer模式为我们监察I/O端口,如果有内容进来,会自动通知我们,这样,我们就不必开启多个线程死等,从外界看,实现了流畅的I/O读写,不堵塞了。
NioEndpoint就是使用Java中的NIO技术,来实行对Socket的处理。它主要包含两个部业务处理部分:Poller线程组和Acceptor线程组。
Acceptor
实现Runnable接口,在ServerSocketChannel侦听事件,将NioChannel交给Poller去处理。
protected ServerSocketChannel serverSock = null;
.....
socket = serverSock.accept();
.....
getPoller0().register(channel);
Poller
实现Runnable接口,不断的轮询selector,最近将socket交给handler处理。
初始化和启动
在bind()中完成对socket/SSL(如果要支持的话)等资源的初始化。
serverSock = ServerSocketChannel.open();
socketProperties.setProperties(serverSock.socket());
InetSocketAddress addr = (getAddress()!=null?new InetSocketAddress(getAddress(),getPort()):new InetSocketAddress(getPort()));
serverSock.socket().bind(addr,getBacklog());
serverSock.configureBlocking(true); //mimic APR behavior
serverSock.socket().setSoTimeout(getSocketProperties().getSoTimeout());
......
if (isSSLEnabled()) {
..........
}
在startInternal(),启动Poller线程组, Comet Poller线程组(两个都是Poller类),Sendfile线程组,Acceptor线程组和1个运行AsyncTimeout接口的线程组.
// Start poller threads
pollers = new Poller[getPollerThreadCount()];
for (int i=0; i<pollers.length; i++) {
pollers[i] = new Poller();
Thread pollerThread = new Thread(pollers[i], getName() + "-ClientPoller-"+i);
pollerThread.setPriority(threadPriority);
pollerThread.setDaemon(true);
pollerThread.start();
}
// Start acceptor threads
for (int i = 0; i < acceptorThreadCount; i++) {
Thread acceptorThread = new Thread(new Acceptor(), getName() + "-Acceptor-" + i);
acceptorThread.setPriority(threadPriority);
acceptorThread.setDaemon(getDaemon());
acceptorThread.start();
}
分享到:
相关推荐
在Tomcat源码中,`org.apache.catalina.Container`类代表容器,而`org.apache.catalina.Host`和`org.apache.catalina.Context`则分别表示主机和Web应用上下文。 3. **ServletConfig与Web应用配置** `ServletConfig...
【描述】"tomcat源码,servlet源码,简单实用" 暗示我们将关注Tomcat如何管理和执行Servlet,以及如何构建高效的Web服务。源代码分析对于理解Tomcat的工作原理、优化性能或进行自定义扩展非常有价值。这里的“简单...
5. **连接器(Connector)**:Tomcat使用`AprLifecycleListener`和`NioEndpoint`(或`AprEndpoint`,取决于你的系统)来监听和处理网络连接,提供了高并发处理能力。 6. **JSP支持**:Jasper模块负责JSP的编译和...
比如,通过源码分析,可以掌握HTTP连接处理器、NioEndPoint、Http11NioProtocol的初始化和启动过程,了解Tomcat如何处理HTTP请求。对于BIO连接器,由于其缺点导致在高并发场景下表现不佳,Tomcat官方已建议在新版本...
Tomcat Connectors,也称为Coyote,是Apache Tomcat服务器的核心组件之一,负责处理HTTP、AJP等网络协议的连接和通信。最新版本的`tomcat-connectors-1.2.40-src.zip`提供了这一关键模块的源代码,这对于开发者深入...
学习Tomcat源码有助于理解其工作原理,提升解决问题的能力。可以从关键组件如Connector、Container入手,结合官方文档和社区资源,逐步深入。 10. **12.实战:优化并提高Tomcat启动速度** (缺少具体内容,但主题...
9. **性能优化**:Tomcat源码中包含了很多可调整的参数和设置,如线程池大小、缓冲区大小、超时时间等,这些都是性能调优的关键。 10. **集群支持**:如果需要构建高可用的Tomcat集群,`Cluster`模块的源码提供了...
Coyote支持多种连接器,如基于Java NIO的NioEndpoint和传统的BIO-based AprEndpoint(使用Apache Portable Runtime库)。 3. ** Jasper**: Jasper是Tomcat中的JSP引擎,负责将JSP页面编译为Java类,并最终转换为...
在Java的Web服务器领域,Tomcat无疑是最为广泛使用的轻量级应用服务器之一。它以其开源、免费、高效的特点深受开发者喜爱。在这个系列的第三部分,我们将深入探讨Tomcat处理HTTP请求的核心组件——`Connector`类。`...
- `org.apache.tomcat.util.net`:网络连接处理,如NioEndpoint或AprEndpoint,它们管理线程池来处理网络连接。 6. **安全性**: - `org.apache.catalina.authenticator`:身份验证器,实现各种认证机制,如...
Java中,可以使用`org.apache.tomcat.util.net.jsse.NioEndpoint`和`org.apache.coyote.http11.Http11NioProtocol`等类搭建基于HTTPS的Java应用服务器,但这通常涉及到复杂的服务器配置和编程,不在此详细展开。...