Keep-Alive 总结

简介

Keep-Alive是http请求头信息中的一个配置参数,开启之后俗称保持HTTP长连接,HTTP 1.0和HTTP 1.1都支持,HTTP1.0中该属性默认是关闭的,可在头信息中配置开启(Connection keep-alive),HTTP1.1中该属性是默认开启的,协议版本的控制权掌握在浏览器和服务器,现在市面上的浏览器基本上都默认使用HTTP1.1,若双方协议版本不匹配,可向下兼容,如浏览器为HTTP1.1,服务器为HTTP1.0,则数据将按照HTTP1.0进行传输。主流服务器如nginx都默认使用HTTP1.1。

对比

短连接:

建立tcp连接

发起请求

响应请求

断开tcp连接

建立tcp连接

发起请求

响应请求

……

长连接:

建立tcp连接

发起请求

响应请求

发起请求

响应请求

……

短连接劣势:

如访问一个页面,页面中有多张图片,每获取一直图片就要重新建立一次连接,造成了短时间内服务器的访问压力,对用户来说,图片会加载的很慢,影响用户体验。

长连接的劣势:

用户如果访问页面后没有关闭页面,连接会一直存在,服务器的同时连接数相对而言会处于一个比较高的值,占用过多的网络带宽,如果服务器性能或网络带宽不是很优越,很容易造成服务器的宕机。

结论

建议服务器对于每个长连接每隔一段时间自动断开,对应nginx服务器的参数配置如下,值得注意的是现在市面上很多浏览器都内置了这个功能。

keepalive_timeout  120 (应该是秒为单位)

时间: 2024-10-12 20:30:24

Keep-Alive 总结的相关文章

TCP 连接与TCP keep alive 保活检测机制

生产环境中一台2核4G的linux服务器TCP连接数时常保持在5-7w间徘徊,查看日志每秒的请求数也就100-200,怎么会产生这么大的TCP连接数.检查了下客户端上行的HTTP协议,Connection 头字段是Keep-Alive,并且客户端在请求完之后没有立即关闭连接.而服务端的设计也是根据客户端来的,客户端上行如果Connection:Keep-Alive,服务端是不会主动关闭连接的.在客户端与服务端交互比较频繁的时候,这样的设计还是比较合理的,可以减少TCP的重复握手.显然如果只交互一

Linux下关于TCP的keep alive的实现源码分析

TCP下的Keep Alive 我们常说的TCP的keep alive,就是为了保证连接的有效性,在间隔一定的时间发探测包,根据回复来确认该连接是否有效.通常上层应用会自己提供心跳检测机制,而Linux内核本身也提供了从内核层面的确保连接有效性的方式. 在sock 函数中可以设置是否需要打开keep alive开关,默认建立socket 是关闭keep alive的.代码如下 optval = 1; optlen = sizeof(optval); if(setsockopt(s, SOL_SO

【转】Linux下socket keep alive讲解

[需求]不影响服务器处理的前提下,检测客户端程序是否被强制终了.[现状]服务器端和客户端的Socket都设定了keepalive属性.服务器端设定了探测次数等参数,客户端.服务器只是打开了keepalive机能服务器端起了一个监视线程,利用select来检测socket是否被关闭... 下面这是我的一点肤浅理解. 1.关于keep alive 无论windows,还是linux,keepalive就三个参数: sk->keepalive_probes:探测次数sk->keepalive_tim

SQL Server 2012故障转移的looksalive check和is alive check

什么是looksalive check和is alive check SQL Server故障转移集群是建立在windows集群服务上的一种热备的高可用方案.在集群运行过程中,windows集群服务定期检测节点的资源健康状态,如果发生了故障,会根据预先定义的故障转移策略把SQL Server服务从故障节点切换到可用节点上,从而实现SQL Server的高可用. 而looksalive和isalive就是windows集群服务定期检测节点的资源健康状况的两个方法,它们存在于 resource dl

How to Keep Alive SSH Sessions

How to Keep Alive SSH Sessions Many NAT firewalls time out idle sessions after a certain period of time to keep their trunks clean. Sometimes the interval between session drops is 24 hours, but on many commodity firewalls, connections are killed afte

Linux 之Keep alive

基本介绍 Keep alive 可以设置在操作系统级别, 作用于对本机所建立的连接. 在设定的时间内对远程主机返送一个简单的tcp 包,用来探测远程主机是否还有响应. 主要应用场景有2个:1. 更早的知道远程主机down 掉了. 正常情况下A 主机 和B 主机建立了连接. A 发送了信息给B 主机,B 说收到了, A 开始等待. 但B 主机down 掉了, 但B 又没有对A 说自己已经down 了, 所以A 会一直等下去(除非应用程序设置的有timeout 机制).使用了keep alive 可

linux下socket keep alive讲解

[需求] 不影响服务器处理的前提下,检测客户端程序是否被强制终了.[现状]服务器端和客户端的Socket都设定了keepalive属性.服务器端设定了探测次数等参数,客户端.服务器只是打开了keepalive机能服务器端起了一个监视线程,利用select来检测socket是否被关闭... 下面这是我的一点肤浅理解. 1.关于keep alive 无论windows,还是linux,keepalive就三个参数: sk->keepalive_probes:探测次数sk->keepalive_ti

mha 复制检查报错“There is no alive server. We can't do failover”

安装mha所参考的文章: http://linzhijian.blog.51cto.com/1047212/1906434 http://www.cnblogs.com/xiaoboluo768/p/5984530.html 参考以上文章搭建mha0.57+centos7+mariadb10.1.22 配置文件内容: 验证: 1.验证ssh成功 2.验证复制状态失败 解决思路: 1.远程测试数据库是否可以连接,可以连接 答案:未解决 2.肯定不能度娘了 在谷歌上查询到wubx大师回答的如上错误的

keep alive的相关介绍

    无论Windows还是linux,Keepalive就三个配置参数.下文以linux环境为介绍. Technorati 标签: keepalive     tcp_sock结构体中有三个有关的成员变量.     keepalive_probes  : 探测次数     keepalive_time      : 探测的超时时间     keepalive_intvl       : 探测间隔     对 于一个已经建立的tcp连接.如果在keepalive_time时间内双方没有任何的数

python局域网alive ip侦听

python局域网alive ip侦听 作者:vpoet 日期:夏季 注:写着玩,欢迎copy # -*- coding: cp936 -*- # coding = utf-8 import os import re import thread import time import socket import sys def Ping_Ip(Curr_Ip): global Count_Thread,lock,ThreadsNum #print "*****************Chile_T