我们收到“在回复超时内未收到回复。超时为 5000 毫秒(约 5 秒)。当我们尝试同时连接 300 个客户端时,在所有 smack 客户端中等待成功的 SASL 身份验证时出现异常。
服务器机器环境: 操作系统:Microsoft Windows 7 Professional 系统类型:64 位操作系统 处理器:Intel(R) Core™2 Duo CPU E7500 @ 2.93GHz,2 核 RAM:4GB
Openfire 环境:版本:Openfire-4.0.4。Java 内存:我们将最小和最大内存大小自定义为 600MB。
openfire-service.vmoptions -Xms600m -Xmx600m
Smack 版本:4.4.2
我们正在使用一个基于 Java 的 Windows 桌面客户端,该客户端使用 smack 4.4.2 版本与 Openfire 服务器进行通信。我们将 Openfire 作为 Windows 服务运行。当我们尝试连接 50 个 50 到 300 个客户端时,我们没有遇到任何问题。连接所有 300 个客户端并建立通信后,我们尝试重新启动 Openfire 服务器。客户端将持续 ping 服务器,直到它启动。服务器启动后,我们所有的客户端都将尝试与服务器连接。当时所有客户端都抛出异常“在回复超时内没有收到响应。”。无论它尝试重新连接多少次,都会收到相同的异常。
例外:
org.jivesoftware.smack.SmackException$NoResponseException: No response received within reply timeout. Timeout was 5000ms (~5s). While waiting for successful SASL authentication [XMPPTCPConnection[not-authenticated] (0)]
at org.jivesoftware.smack.SmackException$NoResponseException.newWith(SmackException.java:99)
at org.jivesoftware.smack.sasl.SASLMechanism.throwExceptionIfRequired(SASLMechanism.java:339)
at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:211)
at org.jivesoftware.smack.AbstractXMPPConnection.authenticate(AbstractXMPPConnection.java:904)
at org.jivesoftware.smack.tcp.XMPPTCPConnection.loginInternal(XMPPTCPConnection.java:381)
at org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.java:641)
at handler.LoginHandler.login(LoginHandler.java:30)
我们参考了论坛并尝试使用 XMPPTCPConnection 类的“setReplyTimeout(20000)”方法将所有客户端(300)的回复超时时间增加到 20 秒。但是在上面提到的 Openfire 服务器重启案例中问题仍然没有解决。在我们遇到这个问题后,在不停止 Openfire 服务器的情况下,我们修改了一些客户端回复超时,最长可达 80 秒。仍然是客户通过同样的例外。此外,当客户端尝试连接时 Openfire 重新启动后,Openfire Java 内存达到最大值。
解决此问题的唯一方法是重新启动每个客户端。请帮助我们找到更多相关信息并解决问题。
提前致谢!