http连接优化

http连接的性能优化

  1. 并行连接(能够同一时候和多台server建立HTTP连接)
  2. 持久连接
  3. 管道化连接
  4. 复用的连接

并行连接

长处:

并行连接能够在带宽资源充足的情况下同一时候建立多个HTTP连接,加快页面的载入速度。

缺点:

并行连接在带宽资源不足的情况下会是连接竞争资源。效率反而下降。同一时候建立多条连接会消耗大量内存,对server来说。大量的用户产生大量的连接可能会超过server的处理能力,所以server一般可以关闭来自特定client的超量连接。

持久连接(Keep-Alive/persistent)

长处:

重用已对目标server打开的空暇持久连接,就能够避免缓慢的连接建立阶段。同一时候,已经打开的连接还能够避免慢启动的拥塞适应阶段。以便更快的进行传输数据。

如今的web应用程序都是并行连接+持久连接的形式。

管道化连接:

能够同意在持久连接上可选的使用请求管道。相当于流水线的功能。在对应到达之前,能够将多条请求放入队列。

管道化连接的几条限制:

  1. 假设连接不是持久的,就不应该使用管道
  2. 必须依照与请求同样的顺序回送http响应。http报文中没有序列号标签。因此假设收到的响应失序了。那么就没办法将其与请求匹配起来了。
  3. httpclient必须做好连接会在随意时刻关闭的准备,还要准备重发全部未完毕的管道化请求。
  4. httpclient不应该用管道化的方式发送会产生副作用的请求(POST请求)。比方POST是要买一本书,再运行一次就又买了一本书,显然是不能运行的。

http连接的关闭

http的通信是建立在TCP连接之上的,所以http连接的关闭事实上就是TCP连接的关闭。连接关闭分为全然关闭和半关闭,close会同一时候关闭输入和输出信道。shutdown仅仅会单独关闭输入或者输出信道。

TCP关闭及重制错误

当一端关闭了输出信道。还有一端的对等实体会在从其缓冲区中读出数据之后收到FIN(说明流结束了),同一时候该对等实体会向用用程序传送一个文件结束符,这样它就知道你将连接关闭了。此时对端实体的应用程序会发送一个FIN,最后就是TCP连接全然断开。

关闭输入信道比較危急,除非你知道还有一端不打算再发送其它数据了。假设还有一端向你已关闭的输入信道发送数据,操作系统就会向还有一端的机器回送一条TCP“连接被对端重置”的报文。

(重置报文会被当做非常严重的错误来处理,直接删除对端还未读取的全部缓存数据。使应用程序产生错误)

主动关闭的一方在为对方的FIN发送ACK之后进入TIME_WAIT状态。

TIME_WAIT也称为2MSL等待状态。每一个详细的TCP实现必须选择一个报文段最大生成时间MSL。它是不论什么报文段被丢弃前在网络内的最长时间。我们知道这个时间时有限的,由于TCP报文是以IP数据包在网络内传输,而IP数据包则有限制其生存时间的TTL字段。

为什么要设置为2MSL呢?由于这样能够再次发送最后的ACK避免ACK丢失。

这样的2MSL等待的还有一个结果是这个TCP连接在2MSL等待期间。定义这个连接的插口(clientip和port,服务端ip和port)不能被使用,这个连接仅仅能在2MSL等待结束后才干再次使用。

在连接处于2MSL等待时,不论什么迟到的报文段将被丢弃。由于处于2MSL等待的、由该插 口对(socket pair) 定义的连接在这段时间内不能被再用。

FIN-WAIT_2状态:

FIN-WAIT_2状态表示本端已经发送FIN同一时候接收到对端的ACK,等待对端发送FIN。可是假设对端一直不发送FIN,那么状态是不是会一直持续下去呢?不会的,假设运行主动关闭的应用程序想运行全关闭,那么会设置一个定时器,假设时间超过10分75秒,TCP进去CLOSED状态。

正常关闭:

总之,实现正常关闭的应用程序首先应该关闭他们的输出信道,然后等待连接还有一端的对等实体关闭它的输出信道,当两端都告诉对方他们不再发送不论什么数据之后。连接会被全然关闭。而不会有重置的危急。

可是无法确保对等实体实现半关闭。因此想要正常的关闭连接的应用程序应该先半关闭输出信道,然后周期性的检查其输入信道的状态(查找数据。或流的结尾),如收到数据结尾标记,能够结束该连接。

假设在一定的时间区间内没有关闭输入信道。应用程序能够强制关闭连接,以节省资源(内存和socket)。

长连接

长连接的传输数据完毕识别

使用长连接之后,client、服务端怎么知道本次传输结束呢?分为两种:

推断数据传输是否达到了Content-Length仅仅是的大小

动态生成的文件没有Content-Length,它是分块传输(chunked)。分块传输的数据最后会有一个空的chunked块。表示本次传输的结束。很多其它请參考HTTP
Keep-Alive模式

长连接的过期时间

client的长连接不可能无限期的拿着,由下面几种关闭长连接的方式:

  1. server会告诉client超时时间,在响应头部中Keep-Alive中指明timeout时间或者max最大事务数
  2. client或者服务端断开连接(关闭或者下线),主动发起四次握手

參考资料:

1.《http权威指南》

2.  http://www.cnblogs.com/cswuyg/p/3653263.html

时间: 2024-11-08 09:00:33

http连接优化的相关文章

10 表连接优化

本章提要-----------------------------------------查询优化器要确定多张表的连接顺序和连接方法, 目的是通过尽早的过滤不需要的数据, 减少要处理的数据量.本章会介绍3种基本连接方法: 嵌套循环连接, 合并连接, 哈希连接如何选择连接放的的基本建议.----------------------------------------- 10.1 定义    连接树    数据库引擎支持的所有的连接方法都是每次只能处理两个数据集. 它们被称作 左节点 和 右节点,

mysql优化之连接优化

Posted by Money Talks on 2012/02/23 | 第一篇 序章第二篇 连接优化第三篇 索引优化第四篇 查询优化第五篇 到实战中去 连接优化 连接优化主要指客户端连接数据库以及数据库为响应客户端的请求而打开数据表和索引的过程中涉及到的参数调整.原文可以参考这里或者这里.(原文链接 http://ddbiz.com/?p=950)尽管不同的mysql发行版本的编译和链接方式也会影响到客户端的链接请求,但是由于我的系统多是直接安装mysql的发行包,且很少会做改动,因此关于手

(一)MySQL 连接优化

一.MySQL 连接优化 1.查看连接参数(show variables) mysql> show variables like '%connect%'; +-----------------------------------------------+-----------------+ | Variable_name | Value | +-----------------------------------------------+-----------------+ | characte

HiveServer连接优化

引言 数据平台目前通过Hive SQL的方式提供数据分析服务,系统使用多台HiveServer(JDBCServer)接收客户端连接请求,实际使用场景中频频出现HiveServer内存消耗过多导致机器Swap过高,需要重启HiveServer来缓解问题,但在某些任务比较集中的时间段往往会导致大量任务执行失败(我们配备了相应的任务重试机制,但也会带来一定的影响). 在与运维同学的流通过程中,偶然提到是否可能某台HiveServer接收的连接请求过多,执行过程中负担过重引起的(暂不考虑其它可能因素)

MongoDB连接数与连接优化

默认每个连接数占用10M内存 ulimit -a 查看stack size MongoDB服务器内存要满足 connection overhead + data size + index size 即连接数开销+热点数据+索引 连接数太多的问题: 如果在日志中遇到类似如下的错误信息: ? 1 "too many open files" ? 1 "too many open connections"  则说明打开的连接数太多了,有两个限制mongod/mongos连接

iOS网络连接优化

如何在APP端,让用户的联网体验更好? 最初在写网络接口时,考虑的问题比较少,最多加个延时,到了相应的时间点(如5秒,10秒),要是还不来信息,直接弹出提示:服务器无响应!!! 尼玛,一次无响应.两次无响应····n次无响应.要是老板也有这种体验,呵呵,赶快去优化.当然,这么基本的用户体验问题不能等到老板发火再处理,自己先认认真真地思考怎么解决. 优化第一招:联网前检测网络状况 苹果提供了Reachability 来检测网络状况,每次调用接口前,测试设备是否能联网: Reachability *

http连接优化与浏览器允许的并发请求资源数相关资料(整理转载)

网页性能优化相关资料: https://developer.yahoo.com/performance/rules.html#page-nav 前端技术的逐渐成熟,还衍生了domain hash, cookie free, css sprites, js/css combine, max expires time, loading images on demand等等技术.这些技术的出现和大量使用都和并发资源数有关. 按照普通设计,当网站cookie信息有1 KB.网站首页共150个资源时,用户

编译连接优化

最近在做exe体积优化的事情,于是把vc10编译器连接器有关的选项都过了一遍 一般情况下,使用/O1做最小体积优化 根据msdn介绍,/O1等于/Og /Os /Oy /Ob2 /Gs /GF /Gy,也就是说/O1 会自动开启 <Global Optimization>/Og.<Favor small code>/Os.<Omit Frame Pointers> /Oy.<string pooling>/GF./Gs(Control Stack Check

极限优化:php巧用tcp长连接

极限优化:php巧用tcp长连接 提交 我的评论 加载中 已评论 极限优化:php巧用tcp长连接 2015-01-23 架构师之路 架构师之路 架构师之路 微信号 功能介绍 通往架构师之路,悠远而漫长,一路上,我们同行. 上一期,和大家分享了YouTube系统架构,本期将和大家分享一个大并发下php使用tcp长连接访问后端的优化方法. php巧用TCP长连接优化 一.面向人群如果你的站点架构满足以下几点,那么本文的优化方案会非常适合你:1)使用php等脚本语言作为开发语言2)需要连接后端服务,