长连接交互中的连接恢复与异常处理

1. 客户端应该有自动重连机制,或者,在需要发送业务数据前如果发现连接已断开,则重连。

2. 有一种极端的情况是,服务端出问题关闭连接,客户端立即重连,由于服务端问题还没修复,客户端重连上后马上又断开。。。如果并发很高的话,服务端会不堪重负。 解决办法是客户端应逐渐重连间隔,第二次重连在第一次5秒后,第三次在10秒后,第N次在1分种后。。。

3. 服务端出现异常如何处理?如果确定当前处于request/reply语境下,则应该回送当前操作相应的错误报文(就像web服务器的http 500); 否则,应该关闭连接。为什么这时要关闭连接?

   a. 如果你写一个错误报文给客户端,那么客户端可能并不知道这个错误针对的是哪个请求,因为客户端可能并没有主动请求,是服务端主动发下行消息时才出的错。

   b. 如果你不关闭连接,什么也不干,客户端可能会陷入无限等待,因为当前可能正处于request/reply语境下,服务端却不知道。 比如,netty handler中执行到exceptionCaught()方法时,并不知道自己处于哪种语境下。

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.