关于http长连接使用的分享

一.当时使用场景

      用户访问网站会有一条access log ,这条log会有用户的IP,为了了解每天网站访问者的地域分布情况,

需要拿到这些IP去查找IP所属地域;这样一下子就会有很多IP要到固定的服务(比如:http://www.ip.com/127.0.0.1)上去查询


二.分析难点和性能瓶颈

      最简单和一般的实现方式就是拿到这些IP循环的请求查询;事实上我的第一版也是这么干的。

但是跑了一段时间后发现不少超时的,看/var/log/message  发现报了不少 localhost kernel: TCP: time wait bucket table overflow

这种错误。在网上查询了一下发现是由于服务器端口使用太多太快导致不够用;查到这里很多人也许会选择修改Linux内核参数扩大端口

开启端口复用,加快回收等等。这样做还是有一定的效果的但是没有根本上解决问题。

     首先跟说一下一些基本知识和个人的理解:

1. http 连接本身是短连接、无状态的,并且在tcp连接之上的一个协议;

2. tcp 是端到端可信的、有状态的长链接;这两条如果不清楚可以自己去查找资料百度一下一大堆,这里不详细介绍了

3. 默认下发送一个http请求要有这几个过程:域名解析目标机器端口、tcp连接(本机一个端口和目标端口)、发送http请求、收到http响应、关闭(tcp)连接。

这样每个请求都需要这样来一遍,其实http 1.0 就差不多这样的;但在http 1.1 做了一些优化,这些优化不具体的介绍,只说这次使用Connnection这个报头

字段,默认下的值close还有一个keep-alive。

keep-alive 的作用就是复用tcp连接;在一个tcp连接上多次http请求响应,这样系统就不用耗费大量的资源放在建立和释放tcp连接上,还可以加快的http整体耗时。

另外有个坑要注意,一般如果你请求时带着keep-alive的话服务器一般会跟你保持连接也返回keep-alive,但是为了安全的原因,服务器可能会在一段时间(300秒或者100个http)内返回close,

一般服务器都有这个配置,感兴趣可以自己查阅。所以你得关注这个头,如果服务器关闭了连接你还得重新建立一个。




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值