长连接:
连接建立后,需要通过心跳继续维持连接,这样发消息的时候不用每次都建立连接。
通信的过程:建立连接 --> 数据传输 --> 维持心跳 --> 数据传输 --> --> 关闭连接。
相当于自己要维护一个心跳来确保客户端和服务端没有断开。
短连接:
连接建立后,检测到通信交互完毕,就会关闭连接。下次需要通信时,需要再次建立连接。
通信的过程:建立连接 --> 数据传输 --> 关闭连接。
比如银行业务通信,都是采用的短连接。
Tcp 的长连接和短连接
长连接:在Tcp握手成功后,不立即断开连接,在此连接上进行数据传输,心跳交互,直至客户端或服务端中的任一方主动断开连接,此过程称为长连接。Http1.1 相对于Http1.0 最重要的特性就是引入了长连接。
短连接:客户端在收到服务端的响应后,立刻发送FIN 消息,主动释放连接。当然也有服务端主动断开连接的情况。
Tcp keepalive(保活机制)
Tcp keepalive 通过定时发送 keepalive 探测包 来探测连接的对端是否存活。
一旦发送的探测包没有响应,在重复几次后,就会断开连接。
http keep-alive(是否复用tcp连接)
在http 1.0 的时候,每个http请求都要打开一个tcp socket 连接,并且使用一次之后就关闭这个tcp连接。
在http 1.1 之后,引入了keep-alive 请求头参数,可以通过这个参数控制在一次tcp 连接中可以持续发送多份数据而不会断开连接。这样就能复用tcp 连接,减少tcp连接建立的次数。
http 位于网络协议的应用层,tcp 位于网络协议的传输层。两者的keep-alive的作用是不一样的。http的keep-alive 主要是为了复用tcp连接,避免每次连接都建立tcp。tcp的keepalive主要是一种保活机制,检测对端是否依然存活。
根据通信双方的一个分工 以及 信息传输的方向,可以将通信分为三种方式:全双工,半双工和单工。
全双工(Full Duplex):
一条宽道,通信双方都可以相互发送信息,并且可以同时发送信息。典型的场景比如打电话
半双工(Half Duplex):
一条窄道,通信双方都可以相互发送信息,但是同一时刻只能有一方向另一方发送信息。典型的应用场景比如对讲机。
单工(Simplex):
单行道,通信双方只能有一方向另一方发送消息,典型场景比如打印机。
最近研究的netty 就是 异步全双工长连接通信。