`
ylsun1113
  • 浏览: 28393 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

HTTP协议和tomcat中的HTTP实现(四)

    博客分类:
  • http
阅读更多

二、tomcat中的HTTP实现

tomcathttp的实现是在Http11*Processor中的process方法中做的。之所以加上*号是因为有Http11ProcessorHttp11AprProcessorHttp11NioProcessor三种,为什么有三种这里就不做说明,我们仅选第一个即也是最简单的来分析。

下面重点对keepAlive的实现做一下分析。

 

1、变量说明

keepAlive

布尔型

是否保持keepAlive状态,true表示保持,false表示不保持

 

maxKeepAliveRequests

int

最大的保持keepAlive状态的请求数,也就是第一次发出请求建立连接和保持keepAlive后后续的请求之和的最大值,因此,这个最大值是包括第一次建立连接的请求的。因此若其等于1的话,就表示在建立请求之后不能保持keepAlive状态

 

keepAliveLeft

int

剩余的可以保持keepAlive的请求数,一开始等于maxKeepAliveRequests 。因此若其等于1的话,就表示除去第一次建立连接外,之后不能保持keepAlive状态

 

keptAlive

布尔型

表示是第一次请求还是保持keepAlive后的后续请求,false表示是第一次,true表示保持keepAlive后的后续请求

 

keepAliveTimeout

int

单位millisecond

保持keepAlive后设置的可以等待下一次请求的时间

 

soTimeout

int

单位millisecond

默认的socket timeout 时间,即从设置socket.setSoTimeout后开始计时的等待下一次tcp请求或者可以理解为tcp输入的最长时间,超过这个时间tcp失效

 

disableUploadTimeout

布尔型

是否为上传设置一个不同的socket timeout时间,false表示不设置,true表示设置

 

2、重要方法说明

socket.setSoTimeout

设置一个时间,设置后开始计时,在这个时间里等待下一次tcp请求或者可以理解为tcp输入,若没有等到,则tcp失效

 

3、代码实现

 

首先,变量声明:

                 //默认是要保持keepAlive状态的

                    keepAlive = true;

 

                   //剩余的可以保持keepAlive的请求数=最大的保持keepAlive状态的请求数

                 int keepAliveLeft = maxKeepAliveRequests;

 

                   //默认的socket timeout 时间

                 int soTimeout = endpoint.getSoTimeout();

 

                   //当前使用的线程个数

                 int curThreads = endpoint.getCurrentThreadsBusy();

 

                   //可以使用的最大线程个数

                 int maxThreads = endpoint.getMaxThreads();

 

                    if (curThreads > 0 && maxThreads > 0) {

                     // Only auto-disable keep-alive if the current thread  

                     // usage % can be calculated correctly

 

                        //当前使用的线程个数占可以使用的最大线程个数的比率大于0.75

                        if ((curThreads*100)/maxThreads > 75) {

 

                        //剩余的可以保持keepAlive的请求数为1,除去首次建立连接的一次后

                     //0 即首次连接后不能继续保持keepAlive状态

                         keepAliveLeft = 1;

                     }

                 }

 

                 try {

 

                     //首次设置socket timeout 时间

                     socket.setSoTimeout(soTimeout);

 

                 } catch (Throwable t) {

                     log.debug(

                              sm.getString("http11processor.socket.timeout"), t);

                     error = true;

                 }

 

进入循环

                 //之后处理请求、http协议的处理都在这个循环里进行。http协议里就包括

                 //keepAlive的实现。

                 while (started && !error && keepAlive && !endpoint.isPaused())

       

            // Parsing the request header

            try {

                if (keptAlive) {//

                    if (keepAliveTimeout > 0) {

                        socket.setSoTimeout(keepAliveTimeout);

                    }

                    else if (soTimeout > 0) {

                        socket.setSoTimeout(soTimeout);

                    }

                }

                inputBuffer.parseRequestLine();

                request.setStartTime(System.currentTimeMillis());

                keptAlive = true;

                if (disableUploadTimeout) {

                    socket.setSoTimeout(soTimeout);

                } else {

                    socket.setSoTimeout(timeout);

                }

                inputBuffer.parseHeaders();

            } catch (IOException e) {

                error = true;

                break;

            } catch (Throwable t) {

                if (log.isDebugEnabled()) {

                    log.debug(sm.getString("http11processor.header.parse"), t);

                }

                // 400 - Bad Request

                response.setStatus(400);

                adapter.log(request, response, 0);

                error = true;

            }

分享到:
评论

相关推荐

    JavaWeb HTTP协议&Tomcat&Servlet

    在JavaWeb开发中,HTTP协议、Tomcat服务器和Servlet是三个关键的概念,它们构成了Web应用程序的基础框架。HTTP协议是客户端和服务器之间通信的标准,Tomcat是应用广泛的Java Servlet容器,而Servlet则是Java语言中...

    Tomcat & Http协议

    Tomcat 是一个基于 Java 的开源实现的 Servlet 容器,可以运行 Java Servlet 和 JavaServer Pages(JSP)程序,而 Http 协议是万维网(World Wide Web)中使用的主要协议。 首先,我们来了解 JavaEE 规范。JavaEE ...

    Android&Tomcat服务器Http协议通信

    Tomcat是一款开源的Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范,用于部署和运行Java Web应用。在Android客户端与服务器通信的场景下,Tomcat扮演了接收和响应HTTP请求的角色。 三、HTTP协议...

    http协议详解和tomcat源码,how tomcat works

    本文主要介绍了HTTP协议的基本概念和请求响应模型,以及Tomcat作为Servlet容器的工作原理。通过对Tomcat源码的探索,可以深入了解其内部设计,这对于提升Web应用开发和运维能力具有重要意义。无论是HTTP协议的深入...

    tomcat 7 和 tomcat 8

    4. ALPN(Application-Layer Protocol Negotiation):为实现HTTP/2提供了更高效的连接处理。 5. WebSocket增强:除了基本的WebSocket 1.1支持,还添加了更多的控制和管理功能。 6. 更强的可扩展性:通过改进插件...

    在tomcat中实现https安全连接的方法

    ### 在Tomcat中实现HTTPS安全连接的方法 #### 一、SSL概述 SSL(Secure Socket Layer)是一种用于Web的安全协议,它通过加密数据传输来保护Web通信的安全性。SSL的主要功能是为Web通信提供一个安全通道,确保数据...

    tomcat7,tomcat8,tomcat9

    Tomcat是Apache软件基金会的Jakarta项目中的一个核心项目,是一个开源的Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范。Tomcat7、Tomcat8和Tomcat9是不同版本的Tomcat,每个版本都有其特性和改进...

    服务器原理和协议&Tomcat&Http协议[总结].pdf

    【服务器原理和协议】 ...总的来说,服务器原理、HTTP协议、Tomcat、Servlet和JSP是构建Web应用的基础,它们共同构成了Web服务的核心机制。理解这些知识点对于进行软件开发,特别是Java Web开发至关重要。

    Apache HTTP Server 与 Tomcat 的三种连接方式介绍

    1. mod_jk:安装并配置mod_jk模块后,Apache和Tomcat之间会建立一个工作线程池,Apache将请求分发给线程池中的Tomcat实例。这种方式支持负载均衡和故障转移,可以有效地管理和扩展Web服务器集群。 2. mod_proxy_ajp...

    Apache HTTP Server 与 Tomcat 的连接方式介绍

    它实现了JK(Java Kona)协议,负责将HTTP请求转发到Tomcat实例,同时将响应返回给客户端。通过配置mod_jk的worker.properties文件来定义Tomcat实例,以及httpd.conf中的mod_jk.conf配置来设置路由规则。 2. ** mod...

    tomcat中文帮助手册

    7. **连接器与协议**:讲解`Connector`元素在`server.xml`中的配置,包括HTTP、AJP等协议的使用,以及调整连接器参数以优化性能。 8. **安全性**:讨论如何设置用户认证、角色权限和 Realm,以实现基本的访问控制。...

    基于Tomcat实现HTML5的WebSocket

    在传统的HTTP协议中,浏览器和服务器之间的通信是基于请求-响应模型的,即每次交互都需要客户端发起请求,服务器才能响应。而WebSocket则允许持久连接,允许数据双向传输,大大减少了延迟,提高了效率,尤其适合实时...

    Apache Httpserver2.4.X 和tomcat连接器

    例如,可以通过修改workers.properties文件中的worker列表,实现请求在多个Tomcat实例间的分发,从而提高系统可用性和性能。 总结来说,Apache HttpServer 2.4.X与Tomcat连接器的使用涉及到Apache服务器的模块配置...

    tomcat实现websocket聊天室

    在这个“tomcat实现websocket聊天室”的项目中,我们将深入探讨如何利用Tomcat搭建一个具备单聊、群聊、数据库管理以及用户管理功能的聊天室。 首先,我们需要理解WebSocket API的基本概念。WebSocket协议定义了两...

    简单的Tomcat源码实现

    Tomcat是Apache软件基金会的Jakarta项目中的一个核心项目,它是一个开源的、免费的Web应用服务器,实现了Java Servlet和JavaServer Pages(JSP)规范。 【描述】"tomcat的简易源码实现"指的是通过阅读和理解Tomcat...

    Apache和Tomcat实现集群和负载均衡(WindowsNT)

    ### Apache和Tomcat实现集群和负载均衡(Windows NT) #### 软件环境 为了实现Apache与Tomcat的集群及负载均衡,在Windows NT环境下需要准备以下软件环境: 1. **Apache**: 版本2.0.55。可以从官方网站...

    webservice部署tomcat简单例子(客户端和服务端)

    6. **启动Tomcat**:启动Tomcat服务器,Web服务就会按照指定的端点地址(由`@WebService`注解中的`serviceName`和`endpointInterface`属性决定)运行。 7. **客户端调用**:创建一个Web服务客户端,通过JAX-WS的`...

    tomcat 多部署实现

    在单个Tomcat实例中部署多个应用程序是一种常见的场景,尤其是在开发环境中,这种做法可以帮助开发者更高效地管理资源和测试环境。本文档将详细介绍如何在一个Tomcat实例中部署多个Web应用程序,包括必要的步骤、...

    WebSocket的Java和Tomcat7使用示例

    2. **环境兼容性**:上述示例在多种环境中进行了测试,包括JDK 7+Tomcat 7.0.47/7.0.52/8.0.3和JDK 7+Glassfish 4等。 3. **注意事项**:在IDE(如Eclipse或MyEclipse)中开发时,需要正确配置Tomcat库路径,直接...

Global site tag (gtag.js) - Google Analytics