长连接

作者: 行走的代码 | 来源:发表于2019-10-25 17:33 被阅读0次

短连接:每次通信时,创建 Socket;一次通信结束,调用 socket.close()。这就是一般意义上的短连接,短连接的好处是管理起来比较简单,存在的连接都是可用的连接,不需要额外的控制手段。

长连接:每次通信完毕后,不会关闭连接,这样就可以做到连接的复用。长连接的好处便是省去了创建连接的耗时。

连接的保活:KeepAlive

首先想到的是 TCP 中的 KeepAlive 机制。KeepAlive 并不是 TCP 协议的一部分,但是大多数操作系统都实现了这个机制。KeepAlive 机制开启后,在一定时间内(一般时间为 7200s,参数tcp_keepalive_time)在链路上没有数据传送的情况下,TCP 层将发送相应的KeepAlive探针以确定连接可用性,探测失败后重试 10(参数tcp_keepalive_probes)次,每次间隔时间 75s(参数tcp_keepalive_intvl),所有探测失败后,才认为当前连接已经不可用。

KeepAlive 机制是在网络层面保证了连接的可用性,但站在应用框架层面我们认为这还不够。主要体现在两个方面:

KeepAlive 的开关是在应用层开启的,但是具体参数(如重试测试,重试间隔时间)的设置却是操作系统级别的,位于操作系统的/etc/sysctl.conf配置中,这对于应用来说不够灵活。

KeepAlive 的保活机制只在链路空闲的情况下才会起到作用,假如此时有数据发送,且物理链路已经不通,操作系统这边的链路状态还是 ESTABLISHED,这时会发生什么?自然会走 TCP 重传机制,要知道默认的 TCP 超时重传,指数退避算法也是一个相当长的过程。

KeepAlive 本身是面向网络的,并不是面向于应用的,当连接不可用时,可能是由于应用本身 GC 问题,系统 load 高等情况,但网络仍然是通的,此时,应用已经失去了活性,所以连接自然应该认为是不可用的。

看来,应用层面的连接保活还是必须要做的。

连接的保活:应用层心跳

如何理解应用层的心跳?简单来说,就是客户端会开启一个定时任务,定时对已经建立连接的对端应用发送请求(这里的请求是特殊的心跳请求),服务端则需要特殊处理该请求,返回响应。如果心跳持续多次没有收到响应,客户端会认为连接不可用,主动断开连接。不同的服务治理框架对心跳,建连,断连,拉黑的机制有不同的策略,但大多数的服务治理框架都会在应用层做心跳,Dubbo 也不例外。

TCP和 HTTP 的 KeepAlive 区别对待

HTTP 协议的 KeepAlive 意图在于连接复用,同一个连接上串行方式传递请求-响应数据

TCP 的 KeepAlive 机制意图在于保活、心跳,检测连接错误。

这压根是两个概念。

资料来源:http://blog.itpub.net/31556476/viewspace-2375225/

相关文章

  • http长短连接和长短轮询、webSocket

    本文主要介绍长连接、短连接、长轮询、短轮询 和 webSocket。长连接、短连接、长轮询、短轮询是基于http的...

  • Apache站点优化-长连接

    apache站点优化—长连接长连接介绍长连接实现一、长连接介绍面临问题:http是一个面向连接的协议,用户完成一次...

  • 长连接

    长连接的简单理解(详细定义自行百度): 与Http短连接相反,通过某种方式与服务器一直保持连接就叫长连接。(通过长...

  • 长连接

    滴-放下手中的书,她瞥了一眼手机,是他发来的信息在忙吗?千篇一律的开场她放下手机,继续看书早休息,晚安临睡前,照例...

  • 长连接

    短连接:每次通信时,创建 Socket;一次通信结束,调用 socket.close()。这就是一般意义上的短连接...

  • HTTP长连接和短连接

    HTTP的长连接和短连接本质上是TCP长连接和短连接。 1. 什么是长连接、短连接? 在HTTP/1.0中默认使用...

  • 长连接,短连接

    长连接 1.client 向 server 发起连接 2.server 接到请求,双方建立连接 3.client ...

  • TCP keepalive 和 http keep-alive

    HTTP的长连接和短连接本质上是TCP长连接和短连接。 短连接短连接,顾名思义,与长连接的区别就是,客户端收到服务...

  • http的长连接和短连接(TCP连接)

    HTTP1.0协议不支持长连接从HTTP1.1协议以后,连接默认都是长连接 网络上说HTTP分为长连接和短连接,其...

  • 长短链接

    长连接的概念 HTTP 的请求是在 TCP 连接的基础上发送的,而 TCP链接分为长连接和短连接。 长连接:HTT...

网友评论

      本文标题:长连接

      本文链接:https://www.haomeiwen.com/subject/qshevctx.html