我已经看到这种行为偶尔会发生,但我无法始终如一地重现它。但似乎 Tyrus (v1.10) 中的重新连接逻辑可能会导致同一客户端的多个打开的套接字/线程。
导致连接多个套接字的过程如下所示:
- 客户端打开 Web 套接字到服务器。
- 服务器重新启动/在短时间内变得不可用。
- 客户端开始尝试重新连接。
- 服务器再次可用。
- 两个以上的线程获取到服务器的活动 Web 套接字。
我的重新连接处理程序如下所示:
@Override
public boolean onDisconnect(CloseReason reason)
{
LOG.info("Reconnect handler captured close event. Reason: " + reason);
if(!reconnect)
{
LOG.info("Not attempting to reconnect. Closing the latch");
return false;
}
else
{
LOG.info("Attempting to reconnect.");
return true; // reconnect
}
}
我可以尝试在服务器端解决这个问题并验证每个连接对于客户端来说都是唯一的,但是我必须将新连接同步到单个线程,这甚至不能解决负载平衡服务器的情况.