试图连接时,Tyrus有时会卡住

时间:2016-06-13 16:41:12

标签: java websocket tyrus

我正在使用tyrus-standalone-client-1.12.jar来维护与Websocket服务器(或一组服务器)的连接,我无法控制。我正在创建我配置的ClientManager实例,然后使用clientManager.asyncConnectToServer(this, new URI(server)),其中this是带有注释方法的类的实例,例如@OnOpen@OnMessage等等。

我还注册了ClientManager.ReconnectHandler来处理onDisconnectonConnectFailure,当然还会输出调试消息。

大部分时间它连接都很好,但特别是当服务器出现问题而我连接断开时,重新连接有时不起作用。

当我在true中简单地返回onDisconnect并且有时不会重新连接时我首先注意到它(在这种情况下ReconnectHandler应该为我做了,通常做得也好)。程序的其余部分保持正常运行,但我的websocket客户端在onDisconnect中的调试消息后不会做任何事情。

从那时起我将其更改为仅使用ReconnectHandler通过asyncConnectToServer再次连接(延迟),以便能够切换到另一台服务器(我找不到仅使用ReconnectHandler来实现这一目标的方法。即便如此,asyncConnectToServer有时似乎也没有做任何事情。我确定它会某些,但它不会在onConnectFailure中输出调试消息,也不会调用onOpen,即使在数小时后也是如此,因此客户端结束只是卡在那里。

同样,情况并非总是如此。它可以重新连接好几次,由onDisconnectonConnectFailure触发,然后一次尝试突然挂起。当我有两个程序实例同时运行时,两个都重新连接了几次,然后在同一次重新连接尝试时挂起asyncConnectToServer,这对我来说似乎表明它是由某些状态引起的服务器或连接。

有一次,在服务器似乎有问题的同一时间,当连接(不重新连接)时,它甚至连接失败。

  • 有没有人知道可能导致这种情况的原因?
  • 我是否遗漏了一些设置连接尝试超时的属性?
  • 我错过了某种方法来检索ReconnectHandler.onConnectFailure以外的连接失败信息吗?
  • 我甚至可以重复使用相同的ClientManager多次连接(在上次连接关闭后)?
  • 我的客户端端点实现中是否存在以某种方式阻止调用onOpenonConnectFailure的内容?

如果没有收到任何错误消息并且无法重现它,很难分辨出发生了什么。我在程序上使用了JConsole的Detect Deadlock按钮,这样的客户端就像这样挂了它并没有检测到任何东西(不确定它是否可以,但我想我会提到它)。

0 个答案:

没有答案