KeepAlive随笔
1 .
SocketTimeout
// 响应超时时间,超过此时间不再读取响应
2 .
ConnectTimeout //
链接建立的超时时间
3 . ConnectionRequestTimeout //
HttpClient中,从Connetcion Pool中获得一个Connection的超时时间
TCP Keep-Alive :
1 .
链接建立之后,如果应用程序或者上层协议一直不发送数据,或者隔很长时间才发送一次数据,
当链接很久没有数据报文传输时如何去确定对方还在线,到底是掉线了还是确实没有数据传输,
链接还需不需要保持,这种情况在TCP协议设计中是需要考虑到的。
2 . TCP协议通过一种巧妙的方式去解决这个问题,当超过一段时间之后,
TCP自动发送一个数据为空的报文给对方,如果对方回应了这个报文,
说明对方还在线,链接可以继续保持,如果对方没有报文返回,
并且重试了多次之后则认为链接丢失,没有必要保持链接。
Http Keep-Alive :
1 .
一个完整的HTTP事务,有链接的建立,请求的发送,响应接收,断开链接这四个过程,
早期通过HTTP协议传输的数据以文本为主,一个请求可能就把所有要返回的数据取到,
但是,现在要展现一张完整的页面需要很多个请求才能完成,如图片,JS,CSS等,
如果每一个HTTP请求都需要新建并断开一个TCP,这个开销是完全没有必要的。
2 . 开启HTTP
Keep-Alive之后,能复用已有的TCP链接,当前一个请求已经响应完毕,
服务器端没有立即关闭TCP链接,而是等待一段时间接收浏览器端可能发送过来的第二个请求,
通常浏览器在第一个请求返回之后会立即发送第二个请求,如果某一时刻只能有一个链接,
同一个TCP链接处理的请求越多,开启Keep-Alive能节省的TCP建立和关闭的消耗就越多。
3 .
使用Keep-Alive可以改善这种状态,即在一次TCP连接中可以持续发送多份数据而不会断开连接。
通过使用Keep-Alive机制,可以减少tcp连接建立次数,也意味着可以减少TIME_WAIT状态连接,
以此提高性能和提高httpd服务器的吞吐率(更少的TCP连接意味着更少的系统内核调用,Socket的accept()和close()调用)。
4 .
但是,Keep-Alive并不是免费的午餐,长时间的TCP连接容易导致系统资源无效占用。
配置不当的Keep-Alive,有时比重复利用连接带来的损失还更大。
5 .
如果要在HTTP1.0中支持Keep-Alive,必须明确的在header中加入Connection:keep-alive。
<1>
Client发起一个包含Connection:keep-alive的请求。
<2>
Server收到请求后,如果server支持keepalive,回复一个包含Connection:keep-alive的响应,
不关闭连接,否则回复一个包含Connection:close的响应,关闭连接。
<3>
如果client收到包含Connection:keep-alive的响应,向同一个连接发送下一个请求,直到一方主动关闭连接。
KeepAlive随笔的更多相关文章
- Redis集群服务器-高可用调研随笔[转]
今天改了一天的Bug,本想下午开始专研Redis命令集,结果也泡汤了.只能在下班的路上考虑下Redis集群服务器的高可用方案.随笔而已,尚未成型,仅作记录. 当然,我说的可能比较片面,欢迎拍砖.斧正. ...
- 随笔——python截取http请求报文响应头
随笔——python截取http请求报文响应头 标签: pythonhttp响应头 2014-05-29 09:32 2114人阅读 评论(0) 收藏 举报 分类: 随笔(7) 版权声明:本文为博 ...
- AI人工智能系列随笔
初探 AI人工智能系列随笔:syntaxnet 初探(1)
- 【置顶】CoreCLR系列随笔
CoreCLR配置系列 在Windows上编译和调试CoreCLR GC探索系列 C++随笔:.NET CoreCLR之GC探索(1) C++随笔:.NET CoreCLR之GC探索(2) C++随笔 ...
- C++随笔:.NET CoreCLR之GC探索(4)
今天继续来 带大家讲解CoreCLR之GC,首先我们继续看这个GCSample,这篇文章是上一篇文章的继续,如果有不清楚的,还请翻到我写的上一篇随笔.下面我们继续: // Initialize fre ...
- C++随笔:从Hello World 探秘CoreCLR的内部(1)
紧接着上次的问题,上次的问题其实很简单,就是HelloWorld.exe运行失败,而本文的目的,就是成功调试HelloWorld这个控制台应用程序. 通过我的寻找,其实是一个名为TryRun的文件出了 ...
- keepalive的不足,如何处理
MySQL(或者其它服务)的keepalived高可用监控脚本 开发脚本需求:我们知道,keepalive是基于虚拟ip的存活来判断是否抢占master的机制的,但是如果我们做了MySQL的keepa ...
- ASP.NET MVC 系列随笔汇总[未完待续……]
ASP.NET MVC 系列随笔汇总[未完待续……] 为了方便大家浏览所以整理一下,有的系列篇幅中不是很全面以后会慢慢的补全的. 学前篇之: ASP.NET MVC学前篇之扩展方法.链式编程 ASP. ...
- 使用Beautiful Soup编写一个爬虫 系列随笔汇总
这几篇博文只是为了记录学习Beautiful Soup的过程,不仅方便自己以后查看,也许能帮到同样在学习这个技术的朋友.通过学习Beautiful Soup基础知识 完成了一个简单的爬虫服务:从all ...
随机推荐
- AngularJS1.X学习笔记3-内置模板指令
前面学习了数据绑定指令,现在开始学习内置模板指令.看起来有点多,目测比较好理解.OK!开始! 一.ng-repeat 1.基本用法 <!DOCTYPE html> <html lan ...
- sublime Text3快捷键使用大全
Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本.Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.举个栗子:快速选中并更改所有相同的变量名.函数名等.Ct ...
- java 基础知识一 初识java
java 基础知识一初识java 1.java语言的特点 (1)简洁有效(2)可移植性(3)面向对象(4)解释型(5)适合分布式计算 2.java的源文件扩展名为.java 编译后的扩展名为.cla ...
- Swift中枚举的总结以及使用
枚举定义了一组具有相关性的数据,是开发者可以再带吗中以一个安全的方式来使用这些值,以又助于提供代码的可读性. 在Swift中,枚举可以分成两种:任意类型的枚举和指定类型的枚举,结构如下: //任意类型 ...
- Android 代码库(自定义一套 Dialog通用提示框 )
做Android开发五年了,期间做做停停(去做后台开发,服务器管理),当回来做Android的时候,发现很生疏,好些控件以前写得很顺手,现在好像忘记些什么了,总要打开这个项目,打开那个项目 ...
- JAVAEE规范基础知识
JavaEE规范基础知识 本人博客文章网址:https://www.peretang.com/basic-knowledge-of-javaee-standard/ JavaEE简介 JavaEE,J ...
- .NET的JSON格式数据的三种转换方式
说明: 1..Net进行JSON格式的数据传递的时候,势必用到序列化和反序列化对象,总共有三种方式可是在.NET中实现序列化和反序列化的需求. 2.操作JSON的速度是:Json.net > M ...
- <java>枚举的简单介绍
1.枚举,enum关键字,相当于public final static. 2.举例: 首先定义了一个名为spiciness的枚举类型. public enum Spiciness { NOT, MIL ...
- TP5学习基础一:增删改查小demo
①TP5--增删改查简单的demo 我先吐槽一下:因为工作需要研究tp5,去官网看了一下哎呦,资源挺多挺全啊!然后下载唯一免费的官方教程,我曹pdf打开533页.讲的很细但是开发能等看完才做吗?看到精 ...
- spring注解读取json文件
开发时候在接口没有提供的时候,可以用json文件提前模拟接口数据 1.service层 package com.syp.spring.service; import java.io.File; imp ...