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

http连接优化的更多相关文章

  1. mysql优化之连接优化(open-files-limit与table_open_cache)

    MySQL打开的文件描述符限制 Can't open file: '.\test\mytable.frm' (errno: 24) OS error code : Too many open file ...

  2. mysql优化之连接优化

    Posted by Money Talks on 2012/02/23 | 第一篇 序章第二篇 连接优化第三篇 索引优化第四篇 查询优化第五篇 到实战中去 连接优化 连接优化主要指客户端连接数据库以及 ...

  3. MySQL优化二(连接优化和缓存优化)

    body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10 ...

  4. 百度APP移动端网络深度优化实践分享(二):网络连接优化篇

    本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<二>连接优化>,感谢原作者的无私分享. 一.前言 在<百度APP移动端网 ...

  5. 【mysql 优化 5】左连接和右连接优化

    原文地址:8.2.1.8 Left Join and Right Join Optimization mysql以下列方式实现一个A left join B 连接条件: 1,表B设置为依赖于表A和A所 ...

  6. MySQL实验 内连接优化order by+limit 以及添加索引再次改进

    MySQL实验 内连接优化order by+limit 以及添加索引再次改进 在进行子查询优化双参数limit时我萌生了测试更加符合实际生产需要的ORDER BY + LIMIT的想法,或许我们也可以 ...

  7. 网络编程Netty IoT百万长连接优化

    目录 IoT推送系统 IoT是什么 IoT推送系统的设计 心跳检测机制 简述心跳检测 心跳检测机制代码示例 百万长连接优化 连接优化代码示例 TCP连接四元组 配置优化 IoT推送系统 IoT是什么 ...

  8. HiveServer连接优化

    引言   数据平台目前通过Hive SQL的方式提供数据分析服务,系统使用多台HiveServer(JDBCServer)接收客户端连接请求,实际使用场景中频频出现HiveServer内存消耗过多导致 ...

  9. 【mysql 优化 4】嵌套连接优化

    原文地址:Nested Join Optimization 与SQL标准相比,table_factor的语法被扩展.后者仅接受table_reference,而不是一对括号内的列表.如果我们将tabl ...

随机推荐

  1. JS/JQuery获取当前元素的上一个/下一个兄弟级元素等元素的方法

    $(function(){ //遍历获取的input元素对象数组,绑定click事件 var len = $("input[type='file']").length; ; i & ...

  2. 【HowTo ML】分类问题-&gt;神经网络入门

    非线性分类器(Non-linear hypotheses) 为什么使用非线性分类器 我们举几个栗子: 假如我们有一个数据空间如左上角坐标系所看到的,那么我们要的模型须要如右边公式所看到的的预測函数. ...

  3. 【北京】低价出售C/C++经典书籍

    都非常新   C++程序设计 5元 高质量C/C++编程指南 8元   C++对象模型 10元 STL源代码剖析 12元 深入浅出MFC 10元 设计模式 10元 C++ primer 8元 面向对象 ...

  4. C# 使用DateTime.TryParseExact将自定义日期类型转换成日期

    在C#中如果将一个字符串类型的日期转换成日期类型很方便的 即使用Convert.ToDateTime("2015/01/01").ToString()或DateTime.TryPa ...

  5. 为什么空格拷贝到linux 会变成两个

    为什么空格拷贝到linux 会变成两个 学习了:https://zhidao.baidu.com/question/266438357.html 在vi界面内输入:set paste 然后进行拷贝: ...

  6. [Algorithm] Print All Subsets of a Set

    Let's say given a number of array, you should print out, all the subet of this array. Example: [1, 2 ...

  7. 火狐浏览器Firefox如何使用插件,火狐有哪些好用的插件

    1 CoorPreviews 不打开网页链接预览该网页的内容. 预览如图所示: 点击关闭旁边的钉子可以让该窗口保持开着并且浏览速度加快.这对于快速浏览图片时非常有用. 2 FoxTab 3D方式预览网 ...

  8. ORACLE常用监控语句(未完待续)

    --查询日志的切换频率 select  t1.RECID as srecid        ,t2.RECID as erecid        ,t1.FIRST_TIME as stime     ...

  9. nyoj阶乘之和

     /*阶乘之和 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描写叙述 给你一个非负数整数n,推断n是不是一些数(这些数不同意反复使用,且为正数)的阶乘之和, 如9=1! ...

  10. uniq命令 (转)

    uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用.也就是说,为了使uniq起作用,所有的重复行必须是相邻的. uniq语法 [root@www ~]# uniq [-icu] ...