一次http事务的完成过程:(web服务器端)

1、建立TCP连接

2、接受请求(linux内核从网卡接受请求后,检验端口号和主机名后,发给对应web进程)

3、处理请求(web服务进程)

4、获取资源(web进程通过内核将硬盘中的数据读入linux内核的内存空间,然后再复制到web进程的内存空间中)

5、构建响应(web软件构建响应报文)

6、回送响应(报文+资源)

7、记录日志

当用户请求一个网页内容时,其数据需要从网卡进入,经过tcp拆封装后,发现是送给监听在80端口的web进程时,然后给它。

web进程接受请求,发现是请求网站首页内容,于是向内核发起系统调用,要求进行I/O调取首页文件。

内核进行I/O后,将文件先放到内核内存,再复制到web进程内存,web进程再进行封装,然后再发送到内核的网络模块,最后才从网卡走掉。

这样响应数据从 “硬盘I/O”→“内核空间”→“web进程”→“内核空间网络模块”

多进程:

每个进程的内存地址空间都是独立的,这样从内核空间复制数据时I/O量比较大

由于进程切换的时候,需要保留进程的现场,再切换回去的时候需要回复现场。

所以不能启动过多进程

多线程:

线程共享进程的内存地址空间的资源,所以I/O量比较小。

如果对应的工作进程崩溃,那么其下所有的线程都会崩溃。

nginx的工作模式是有一个master主进程,和N个worker工作线程。

master主进程只复制读取配置、按需生成、回收worker工作线程。而worker线程只负责响应用户请求。

当nginx升级时只需要将二进制执行文件替换即可,当有新连接进来时,就会使用新的worker线程。而旧的连接依然会使用旧的worker线程,直到断开为止才会被回收。

时间: 2024-11-05 02:21:27

一次http事务的完成过程:(web服务器端)的相关文章

spring internalTransactionAdvisor 事务 advisor 初始化过程

spring internalTransactionAdvisor 事务 advisor 初始化过程: 原文地址:https://www.cnblogs.com/xiluhua/p/10200629.html

Web服务器端程序的实现

Web服务器端程序主要是两个部分,一部分是主函数,一部门是命令处理函数.命令处理函数比较好理解就是针对客户端不同的命令进行处理,与客户端进行通信.主函数也有两个主要的功能,第一是要对程序进行初始化,其中包括创建监听套接字并且绑定到地址和端口上,第二是创建子进程处理对应的连接请求. 1.主函数 Web服务器的主函数中第一是初始化程序,第二就是创建子进程.父进程一直监听,子进程进行连接处理,提高服务器端的处理能力,提高效率,流程图如下: 主函数中的代码如下所示: #include "common.h

一次寻找IBatisNet事务bug的过程

本文的上下文环境 操作系统:Win7 x64 Professional 开发工具:Visual Studio 2017   语言:C# 数据库ORM:IBatisNet 1.6.2 一.前言 这个项目的前端有Web端,公众号,微信小程序,后端是用WCF写的,部署成windows service.后端使用了IBatisNet这样的轻量级ORM框架,sql是写在xml里面的,每个模块都有一个xml文件.sql的返回值对应的实体类配置在同一个xml文件里,像这样. 二.问题出现 这个项目一直运行的很正

四十二、视图、触发器、事务、储存过程、函数、流程控制和索引等知识的应用

一.视图 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么用视图 当反复用到两张表的连接操作时,可以将连成的表当做视图保存下来,下次直接使用 3.怎么用视图 create view teacher2course as select * from teacher inner join course on teacher.tid = course.teacher_id; 删除视图:drop view teacher2course 4.注意: 在硬盘中,视图只

C#开发学习——web服务器端控件

Asp.net在客户端开发和web开发所用到的控件还是有很大的差别的,而且Web开发的界面是在浏览器中显示的,所以控件的设计都和前边学习HTML设计有联系,没有客户端开发那么简单,不过我们可以通过专门工具,来帮助我们开发.这篇博客,先简单总结各个控件的功能! 功能 控件 说明 属性 方法 事件 文本 Label 显示文本 Text       TextBox 接受用户的输入,文本/数字/日期等 Text/TextMode/AutoPostBack/Visible/Enable TextChang

【转】asp.net(c#)使用HttpWebRequest附加携带请求参数以post方式模拟上传大文件(以图片为例)到Web服务器端

原文地址:http://docode.top/Article/Detail/10002 目录: 1.Http协议上传文件(以图片为例)请求报文体内容格式 2.完整版HttpWebRequest模拟上传文件请求报文内容封装 3.asp.net(c#)使用HttpWebRequest携带请求参数模拟上传文件封装源码下载 一.Http协议上传文件(以图片为例)请求报文体内容格式 首先,我们来看下通过浏览器上传文件的请求报文内容格式,这里以本人自己写的实例为例,如下图.除了能上传图片(即:头像字段),还

一种构造WEB服务器端recv和send接口阻塞现象的方法

send阻塞 socket recv send接口阻塞,会导致服务器端不在响应客户端任何请求,所以一般情况, 会将socket设置为非阻塞状态, 但是有些场景,例如ssl_accept就需要使用阻塞的socket,否则握手极容易失败, 但是一直阻塞,容易导致服务器端DOS现象. 下面是阻塞的解释 http://blog.csdn.net/xiaofei0859/article/details/6037814 比如你调用send函数发送一定的Byte,在系统内部send做的工作其实只是把数据传输(

java web 服务器端处理json格式参数

前面我们说了传递参数的两种访书,第一是key-value形式,第二是json格式,对于第一种我们在服务器端直接使用 request.getParameter("key");就能获取key对应的value.但是对于传递的json就不能使用这样的代码了,利用json传递的参数存在request的body里,我们需要从里面输入流里面读取,下面是代码: 1 /** 2 * 获取请求的 body 3 * @param req 4 * @return 5 * @throws IOException

SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因

原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中的事务概念,ACID 原则,事务中常见的问题,问题造成的原因和事务隔离级别等这些方面的知识好好的整理了一下. 其实有关 SQL Server 中的事务,说实话因为内容太多, 话题太广,稍微力度控制不好就超过了我目前知识能力范围,就不是三言两语能够讲清楚的.所以希望大家能够指出其中总结的不足之处,对我