TCP连接,底层重试机制,心跳包机制

客户端与服务器端连接建立后,后面的故事会是怎样的呢,连接断开怎么办,需不需要重连,如何知道对方是活着的?一方强制关闭连接,对另一方的影响是什么呢?

下面,逐一回答以下问题。

【客户端】

  • 重连任务:如果session关闭,那么可以尝试做重连,例如加重连task等。具体的连接过程,与普通的客户端连接建立过程并无不同。
  • 心跳包判活:如果session空闲,可以可以尝试发些心跳包,监听是否能正常收到心跳包响应。

【服务器端】

  • 如果连接断开,应如何处理?Server端不做定时扫描,断了就断了,等客户端重连,否则不是无谓操作麽。

【如果一方关闭了,另一方什么反应?应如何处理?】

  • 客户端关闭,服务器端如何做?

a). 如果此时,Server端正在读/写,则会报错:“java.io.IOException: 远程主机强迫关闭了一个现有的连接”,且socket上既有内容将会“丢失”。

b). Server端可正常关闭连接,无需建重连任务。

  • 服务器端关闭,客户端如何做?

a). 如果此时,Client端正在读/写,则会报错:“java.io.IOException: 远程主机强迫关闭了一个现有的连接”,且socket上既有内容将会“丢失”。

b). 启动重连任务。

  • 如果Client尝试去连接的时候,Server端并未启动,如何?

a). Client会收到异常报错:“connection refused.”

原文地址:https://www.cnblogs.com/alipayhutu/p/2554068.html