当前位置: 首页 > news >正文

总结:服务器批量处理http请求的大致流程

总结:服务器批量处理http请求的大致流程

  • 一·客户端发起请求:可以多个请求同时发送
  • 二·Web服务器解析请求(如:Nginx):可以多个请求同时解析
  • 三·Servlet容器接收请求(如:tomcat):可以多个请求同时处理
  • 四·Servlet初始化(如果需要):
  • 五·调用Servlet的service()方法:
  • 六·选择适当的HTTP方法处理:
  • 七·Servlet处理请求:
  • 八·生成响应:
  • 九·Servlet容器发送响应:
  • 十一·Servlet销毁(如果需要):
  • 十二·线程返回到线程池(如果使用):

一·客户端发起请求:可以多个请求同时发送

1.用户通过浏览器访问一个URL,该URL与某个Servlet相关联。
2.浏览器构造一个HTTP请求,请求中包含特定的URL、头部信息、参数等;并将它发送到Web服务器。

二·Web服务器解析请求(如:Nginx):可以多个请求同时解析

1.Web服务器主要作用:请求分发、反向代理、负载均衡器、HTTP缓存服务器,支持静态文件服务,一般不会处理动态请求。

动态请求:比如前端调用某API接口,需要后端服务器运算处理完,再响应给前端报文
静态请求:比如前端调用某API接口,后端直接将某个资源读取返回,不用任何运算。注意:web服务器、servlet容器两者一般都可以称为服务器,如何区分就看具体实际情况了

2.每个服务器都会存在一个,监听指定端口的死循环socket线程,除非服务器关机,这个线程才会停止循环
3.该socket线程每接收到一个http请求,就会从服务器的线程池里面获取一个空闲线程来处理该请求
4.这个新线程接着就会解析请求中的URL路径和参数,然后根据URL映射规则,决定返回哪个静态资源,或者将该http请求继续转发给哪个Servlet容器(如Tomcat、Jetty等)来处理。

三·Servlet容器接收请求(如:tomcat):可以多个请求同时处理

1.Servlet容器主要作用:动态请求的运算处理
2.每个服务器都会存在一个,监听指定端口的死循环socket线程,除非服务器关机,这个线程才会停止循环
3.该socket线程每接收到一个http请求,就会从服务器的线程池里面获取一个空闲线程来处理该请求
4.这个新线程接着就会解析请求中的URL路径和参数,然后根据URL映射规则,找到对应的Servlet对象;并根据请求信息创建HttpServletRequest对象和HttpServletResponse对象,再传递到Servlet对象的service方法里面,然后继续执行service方法

注意:
(1)如果多个URL映射的是同一个servlet程序处理,那么servlet容器会给每个请求分配一个线程进行单独处理;
(2)servlet容器传递给各个线程的servlet对象都是同一个;
(3)servlet容器给每个线程中的同一个servlet对象之service方法,传递的两个参数HttpServletRequest对象和HttpServletResponse对象都是不一样的,这两个对象都是根据http请求报文即时生成的。
(4)这样虽然节省了服务器资源,但这也是造成可能存在高并发的核心原因
(5)因此servlet类中的成员变量要慎重使用,如果存在频繁修改的变量,就尽量不要设置为成员属性,而是设置为方法内的局部变量

四·Servlet初始化(如果需要):

1.如果Servlet实例还没有初始化,容器会调用init()方法进行初始化。这个方法在Servlet的生命周期中只会执行一次。

五·调用Servlet的service()方法:

1.Servlet容器调用Servlet的service()方法,并传递ServletRequest和ServletResponse对象作为参数。

六·选择适当的HTTP方法处理:

1.在service()方法内,Servlet根据HTTP请求的方法(GET、POST等)选择调用适当的doGet()、doPost()等方法。

七·Servlet处理请求:

1.在doGet()、doPost()等方法中,开发者编写具体的业务逻辑来处理请求。这可能涉及到读取参数、执行业务逻辑、访问数据库等。

八·生成响应:

1.Servlet生成一个ServletResponse对象,其中包含要返回给客户端的数据,比如HTML内容。

九·Servlet容器发送响应:

1.Servlet容器将ServletResponse对象传递给Web服务器,然后服务器通过网络将响应发送回客户端。

十一·Servlet销毁(如果需要):

1.如果Servlet容器检测到应用程序正在关闭或者Servlet的生命周期已经结束,它会调用Servlet的destroy()方法,释放资源。

十二·线程返回到线程池(如果使用):

1.处理请求的线程返回到线程池,等待下一个请求。

相关文章:

总结:服务器批量处理http请求的大致流程

总结:服务器批量处理http请求的大致流程 一客户端发起请求:可以多个请求同时发送二Web服务器解析请求(如:Nginx):可以多个请求同时解析三Servlet容器接收请求(如:tomcat)…...

算法通关村第十八关-青铜挑战回溯是怎么回事

大家好我是苏麟 , 今天聊聊回溯是怎么个事 . 回溯是最重要的算法思想之一,主要解决一些暴力枚举也搞不定的问题,例如组合、分割、子集、排列,棋盘等。从性能角度来看回溯算法的效率并不高,但对于这些暴力都搞不定的算法能出结果就…...

区分node,npm,nvm

目录 一,nodejs二,npm三,nvm 区分node,npm,nvm 几年前学习前端的时候学习的就是htmlcssjs 三件套。 现在只学习这些已经不能满足需要了。 一,nodejs nodejs是编程语言javascript运行时环境。(比…...

7-2 小霸王

幼儿园的老师给几位小朋友等量的长方体橡皮泥,但有个小朋友(小霸王)觉得自己的橡皮泥少了,就从另一个小朋友那里抢了一些。请问,是哪个小霸王抢了哪个小朋友的橡皮泥? 输入格式: 测试数据有多组。对于每组…...

Linux内核上游提交完整流程及示例

参考博客文章: 向linux内核提交代码 - 知乎 一、下载Linux内核源码 通过git下载Linux内核源码,具体命令如下: git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 实际命令及结果如下: penghaoDin…...

TS学习——快速入门

TypeScript简介 TypeScript是JavaScript的超集。它对JS进行了扩展,向JS中引入了类型的概念,并添加了许多新的特性。TS代码需要通过编译器编译为JS,然后再交由JS解析器执行。TS完全兼容JS,换言之,任何的JS代码都可以直…...

深圳锐科达风力发电广播对讲解决方案

深圳锐科达风力发电广播对讲解决方案 风力发电对讲通常是在风塔的底部与机舱室安装一键对讲终端,可以一键呼叫控制中心值班人员,结构简单,组网方便,设备可以接入局域网或广域网构成功能应急呼叫系统。 系统实现的功能&#xff1…...

极智芯 | 解读国产AI算力 璧仞产品矩阵

欢迎关注我,获取我的更多经验分享 大家好,我是极智视界,本文分享一下 解读国产AI算力 璧仞产品矩阵。 璧仞在国产 AI 芯领域就是 "迷" 一样的存在,你要说它在市场上的 "建树" 泛善可陈的话,它又 "赫然" 在美国芯片禁令名单中。而这一切的一…...

Echarts折线图常见问题及案例代码

前言 ECharts 是一个使用 JavaScript 实现的开源可视化库,它可以帮助用户以简单的方式创建复杂的时间序列、条形图、饼图、地图等图形。 初学者,可参考下我的另外两篇文章,从基础到深入,解读饼状图的运用。 ECharts初始案例(入门) ECharts之折线图 常见问题及案例代码 …...

javaTCP协议实现一对一聊天

我们首先要完成服务端,不然出错,运行也要先运行服务端,如果不先连接服务端,就不监听,那客户端不知道连接谁 服务端 package d21z; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.a…...

机器学习应用 | 使用 MATLAB 进行异常检测(上)

异常检测任务,指的是检测偏离期望行为的事件或模式,可以是简单地检测数值型数据中,是否存在远超出正常取值范围的离群值,也可以是借助相对复杂的机器学习算法识别数据中隐藏的异常模式。 在不同行业中,异常检测的典型…...

Java -jar参数详解

java -jar 命令用于执行打包成可执行 JAR 文件的 Java 应用程序。在运行时,你可以通过命令行传递参数给这个应用程序。 1. -jar 参数: 说明: 指定要执行的 JAR 文件。示例:java -jar your-application.jar 2. -D 参数&#xff…...

RocksDB 在 vivo 消息推送系统中的实践

作者:vivo 互联网服务器团队 - Zeng Luobin 本文主要介绍了 RocksDB 的基础原理,并阐述了 RocksDB 在vivo消息推送系统中的一些实践,通过分享一些对 RocksDB 原生能力的探索,希望可以给使用RocksDB的读者带来启发。 一、背景 在…...

【C进阶】C程序是怎么运作的呢?-- 程序环境和预处理(上)

前言: 由于c语言的程序编译链接的这块知识点不清楚,回来复习一遍,以便于好理解c知识,我会尽快更新下一篇文章。 目录 1.程序的翻译环境和执行环境 2.翻译环境(编译链接) 编译(编译器&#xf…...

点滴生活记录1

2023/10/10 今天骑小电驴上班,带着小鸭子一起。路上的时候,我给小鸭子说,你要帮我看着点路,有危险的时候提醒我,也就刚说完没几分钟,一个没注意,直接撞到一个拦路铁墩子上,车子连人歪…...

gitea仓库迁移

(1)先安装git,再直接将源机器上的gitea文件夹复制到新机器上。这样原始数据及账号信息都还在。 (2)根据实际情况修改gitea\custom\conf\app.ini文件夹下app.ini文件的相关路径。 (3)如下命令启…...

〖大前端 - 基础入门三大核心之JS篇㊽〗- BOM特效开发

说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费,如需要项目实战或者是体系化资源,文末名片加V!作者:哈哥撩编程,十余年工作经验, 从事过全栈研发、产品经理等工作,目前在公司…...

【扩散模型】ControlNet从原理到实战

ControlNet从原理到实战 ControlNet原理ControlNet应用于大型预训练扩散模型ControlNet训练过程ControlNet示例1 ControlNet与Canny Edge2. ControlNet与Depth3. ControlNet与M-LSD Lines4. ControlNet与HED Boundary ControlNet实战Canny Edge实战Open Pose 小结参考资料 Cont…...

AI并行计算:CUDA和ROCm

1 介绍 1.1 CUDA CUDA(Compute Unified Device Architecture)是Nvidia于2006年推出的一套通用并行计算架构,旨在解决在GPU上的并行计算问题。其易用性和便捷性能够方便开发者方便的进行GPU编程,充分利用GPU的并行能力&#xff0…...

2023/12/1JAVAmysql(mysql连接,数据定义语言,数据类型,数据操作语言,数据查询语言)

>0...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

synchronized 学习

学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

大话软工笔记—需求分析概述

需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

Go语言多线程问题

打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...