0

我希望 Java 聊天小程序的用户在关闭浏览器窗口时自动注销。

我目前使用以下内容:

public void destroy() {
    sendLogoutMessage();
}

然而,这只适用于 3/4 的时间(可能是由于网络延迟)。

聊天小程序 ping 服务器并在 90 秒后将它们注销(这允许它们由于任何互联网问题而重新连接) - 所以它们最终会被删除,但是我想要一种更好地捕捉关闭事件的方法。

4

1 回答 1

0

我认为您的代码在 100% 的情况下无法正常工作,因为它是在不等待并关闭包括打开的网络连接在内的所有内容的销毁方法中调用的。因此,有时如果网络速度较慢,小程序及其输出流在将注销消息发送到服务器之前被终止。

如果我的理论是正确的,您可能可以检查一下。

  • 尝试查看您是否在服务器日志中获取 logout 命令(以防万一)。相信你会发现命令没有到达。
  • 在客户端打开 java 控制台。您可能会得到 IOException 或 SocketException。我希望检查异常可以让您了解如何改进解决方案。

此外,我建议以下内容。

  1. 在服务器端添加 servlet 会话侦听器,并在会话过期时自动注销。
  2. 将 HTTP 会话的生存时间减少到合理的数量。JBoss 的默认值为 20 分钟,因此设为 1 分钟。
  3. 从您的小程序中实施保持活动机制。这可能非常简单。只需每 30 秒对不执行任何操作的特殊 URL 执行一次 HTTP GET。这将使您的会话保持活跃。

该解决方案应该是您现有解决方案的补充,其工作时间为 3/4。

我希望这有帮助。祝你好运。

于 2010-12-20T12:46:00.547 回答