第一种原因,服务器负责接收请求的 web dispatcher 接收的用户请求数已经到达其阈值,这种情况下,对于此后新进来的用户请求,服务器一律采取拒绝连接的方式,此时客户端眼中观察到的就是服务器无法处理请求的现象了。
第二种情况,服务器接收的用户连接数量很小,但是正在运行 could 密集型的任务,大量消耗了计算资源,也导致新的用户请求无法被处理。
1.需求
了解服务端如何处理http请求,了解基本的处理流程
2.实战
处理http请求分为7个步骤
2.1 Tcp连接
建立一条tcp链接,(若之前不存在持久链接keep-alive),把客户端的ip和port,服务端的ip和port数据放到web服务器连接表中。服务器随时监听链接表中的链接,看有没有数据变化
2.2 接收http请求
一旦我们发送http请求了,这条tcp链接就开始工作了。因为web服务器链接表中有许多链接需要被处理,处理的方式有单线程,多线程这些(这些涉及操作系统的知识)。
2.3 处理http请求
处理的过程大致是把请求的信息解析出来,如下图
2.4 访问资源
访问资源可以是访问静态资源,这个就直接根据url地址去服务器里找就好了。
访问动态资源的话要经过一个叫cgi的东西,再用服务端脚本处理,再返回给前端。如下图所示
2.5 构建响应
要是找到资源,则构建响应信息,包括响应的对象类型,长度,状态码。
另一个情况是重定向响应,就是直接返回一个重定向,客户端看到之后,立刻再向重定向的地址发起请求。重定向的响应的状态码一般是3xx。
2.6 发送响应
把构建的响应发送给客户端
2.7 记录日志
服务端对这个请求响应过程进行记录。(另外专门再讲)
3.总结
以上是服务端处理http请求的大致过程。能让大家有个大致轮廓,当然里面有很多细节的知识没讲到,要另外查询资料并学习
web服务器处理连接请求的四种架构方式:
1、单线程web服务器
此种架构方式中,web服务器一次处理一个请求,结束后读取并处理下一个请求。在某请求处理过程中,其它所有的请求将被忽略,因此,在并发请求较多的场景中将会出现严重的必能问题。
相关推荐:《Python教程》
2、多进程/多线程web服务器
此种架构方式中,web服务器生成多个进程或线程并行处理多个用户请求,进程或线程可以按需或事先生成。有的web服务器应用程序为每个用户请求生成一个单独的进程或线程来进行响应,不过,一旦并发请求数量达到成千上万时,多个同时运行的进程或线程将会消耗大量的系统资源。
3、I/O多路复用web服务器
为了能够支持更多的并发用户请求,越来越多的web服务器正在采用多种复用的架构——同步监控所有的连接请求的活动状态,当一个连接的状态发生改变时(如数据准备完毕或发生某错误),将为其执行一系列特定操作在操作完成后,此连接将重新变回暂时的稳定态并返回至打开的连接列表中,直到下一次的状态改变。由于其多路复用的特性,进程或线程不会被空闲的连接所占用,因而可以提供高效的工作模式。
4、多路复用多线程web服务器
将多进程和多路复用的功能结合起来形成的web服务器架构,其避免了让一个进程服务于过多的用户请求,并能充分利用多CPU主机所提供的计算能力。 web服务器自身并不处理任何动态内容,它是如何响应客户端的动态内容请求呢? 通过某种协议调用额外的其它进程来运行这个动态页面,并将结果取回来以后返回给WEB服务器,进而响应客户端。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)