TCP长连接和短连接 - http长轮询和短轮询

自己在网络通信和协议这些方面其实真的是显得比较弱,对很多知识都不是很了解,这两天看了下长连接的问题,把看的内容记录一下,后面等到实践的时候,再补充。

这里说一下,http是应用层的,而socket是应用层和传输层之间的抽象层。所以说长连接短连接虽然可以说,但本质上只tcp的长连接和短连接。

长连接

首先一般说长连接说的是TCP的长连接,有时候也会说http长连接或者socket长连接,但是这些都是建立在tcp的基础上的,因为http是在应用层,而tcp是在传输层,应用层不涉及到数据的发送和接受,只是表现出来的。

TCP连接是一个双向通道,能够保持一段时间不会关闭,因此就区分了长连接和短连接。而http来说就是把头部的Connection设置为keep-alive。要服务器上同样设置为keep-alive

长连接的好处

为什么要用长连接呢?长连接最重要的是可以服用TCP连接,这样减少了每次建立连接和断开连接的开销。所以现在大部分都是长连接,例如一个页面有很多文件,JS文件,CSS文件等等,不能每次都要建立一次连接,所以长连接是比较好的解决办法。

长连接不会长时间保持的,如果长时间没有响应,超时会自动断开的。

但是如果都保持连接,那么服务器会爆掉,所以TCP连接数量是有限制的。

使用长连接之后,客户端、服务端怎么知道本次传输结束呢?两部分:1是判断传输数据是否达到了Content-Length指示的大小;2动态生成的文件没有Content-Length,它是分块传输(chunked),这时候就要根据chunked编码来判断,chunked编码的数据在最后有一个空chunked块,表明本次传输数据结束。

短连接

那么与长连接对应的就是短连接,在Htpp 1.0之前是没有长连接的,现在在http 1.1才开始有长连接,并且大部分都是长连接。短连接的流程就是:建立连接->发送数据->断开连接。一次发送之后立即断开连接。

短连接的好处

既然有长连接了,为什么还需要用短连接的,因为短连接虽然是之前一直使用的,但是长连接保持了连接不被断开,那么如果并发量很好的时候,就会出现问题,所以短连接不用一直占用服务器资源,可以让服务器空出资源来解决其他的连接。

银行一般使用短连接。好像是因为:管理起来比较简单,存在的连接就是有用的。

数据发送接收方式

  1. 异步

    • 异步双工:接收和发送时在同一个进程中,有两个不同的子进程分别负责发送和接收
    • 异步单工:接收和发送用两个不同的程序来完成。
  2. 同步
    报文的发送和接收是同步进行的,也就是发送完之后,就等待返回,考虑超时,这样就保证了不会无限等待。

短轮询

轮询比较好理解,就是向服务器发送请求,服务器返回请求结果。不断的操作,就叫轮询。

短轮询比较好理解,就是说我不断的轮询的时候,每次都是即时发送即时回复,这样来更新前端的数据,用来保证数据的前后台同步。

比如电商网站,每个物品的库存,是要不断更新的,就会在前段不断的发起请求,保证数据同步。

但这样有个缺点,就是浪费了大量的资源,假如有很多人在浏览这个物品,但是暂时都没有下单,大量的请求可能已经占用了服务器的所有资源。

长轮询

长轮询就是为了解决这个问题来设计的,长轮询的操作都是一样的,前段发送请求给后端,后台接收到请求来返回,但是中间有一点不一样不是瞬间返回。也就是看是否后台的数据有更新,假如后台数据还没有更新,可以把请求暂时挂起来,这样就不会造成频繁请求堵塞服务器了。

假如一直没更新,那么就把数据超时返回就可以了。


注意事项

TCP的keep alive是检查当前的tcp连接是否还是活着的,而HTTP的keep-alive是设置让当前的tcp连接可以保持活着的状态。

当TCP连接一段时间没有进行数据通信的时候,一方会发出一个心跳包keep alive包来检测当前连接是否有效,继续监控。这个间隔时间是可以设置的。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值