目录
前言
浅聊TCP的连接与心跳, 谈谈自己的看法
连接
TCP的连接是虚拟信道, 而不是两台设备在物理上真正形成的连接, TCP的连接是全双工的, 这得益于TCP具有发送缓冲和接受缓冲, 这可以避免发送数据和接受数据之间相互阻塞
对于我们使用TCP连接又可以分为短链接和长连接
TCP短连接
短连接接受数据后进行处理, 数据处理完成后关闭TCP连接
优点是无需维护连接的状态, 实现简单, 适合处理同一用户的长时间间隔的请求
缺点是如果统一用户的请求过于频繁, 则存在大量重复的TCP连接的创建与销毁, 对性能影响较大.
TCP长连接
长连接不会处理完一个数据就断开连接, 而是需要维持TCP的连接, 保证连接的复用, 根据业务在合适的时机再断开连接
优点是保证连接的复用, 适合处理同一用户的频繁请求, 客户端和服务端之间可以进行实时的数据交互, 无需频繁地建立和关闭重复的连接, 提高了通信效率
缺点是需要维护TCP的连接, 增加了复杂度. 当同一用户请求时间间隔较长时, 长期维护TCP连接而没有处理数据, 会白白占用系统资源. 拖累系统性能.
保活
如果我们需要使用TCP长连接, 那么毋庸置疑, 我们需要保证长连接的可靠性, 维护客户端的连接. 在长连接中, 由于网络的不稳定性或其他因素, 可能会导致连接断开, 无法及时发现. 为了避免服务端维护已经挂掉的客户端结点, 服务端和客户端需要感知对方的状态, 确定对方可以正常工作
心跳
为了实现TCP连接的保活, 我们, 需要一种策略来实现我们的目标, 这时候心跳这个机制就派上用场了, 客户端和服务器之间会约定一个心跳间隔时间, 客户端定期发送心跳包给服务器, 服务器收到心跳包后发送应答给客户端, 从而确认连接仍然有效. 如果在心跳间隔时间内没有收到心跳包或应答, 表示连接可能已经断开, 可以重新建立连接或进行其他操作
总结
长连接是为了保持连接的状态, 实现实时数据交互, 心跳是用来检测长连接是否仍然有效, 防止连接断开, 可以及时重连或采取其他措施进行恢复