Проблемы в регистрации пользователя в апплете в чате

StackOverflow https://stackoverflow.com/questions/4489483

  •  11-10-2019
  •  | 
  •  

Вопрос

Я хотел бы, чтобы пользователи Java Chat Applet автоматически выходили из строя при закрытии окна браузера.

В настоящее время я использую следующее:

public void destroy() {
    sendLogoutMessage();
}

Однако это работает только в 3/4 времени (вероятно, из -за задержек сети).

Апплет чата пингирует на сервере и выпускает его через 90 секунд (это позволяет им воссоединиться из -за любых проблем с Интернетом), так что они в конечном итоге удаляются, однако я хотел бы лучше поймать близкое событие.

Это было полезно?

Решение

Я думаю, что ваш код не работает в 100% случаях, потому что он называется методом уничтожения, который не ждет и закрывает все, включая открытые сетевые соединения. Таким образом, иногда, если сеть медленная, апплет вместе с его выходными потоками убит, прежде чем отправляет сообщение о выходе на работу на сервер.

Если моя теория верна, вы, вероятно, можете проверить это.

  • Попробуйте увидеть, получаете ли вы команду журнала в журналах сервера (в случае сбоя). Я считаю, что вы обнаружите, что команда не прибыла.
  • Откройте консоль Java на стороне клиента. Вы, вероятно, получите IOException или SocketException. Я надеюсь, что изучение исключения может дать вам представление о том, как улучшить решение.

Кроме того, я бы предложил следующее.

  1. Добавьте слушатель сеанса сервлета на стороне сервера и автоматически выйти из системы, когда сеанс истек.
  2. Уменьшите время, чтобы продолжить сеанс HTTP до разумного числа. Значение по умолчанию для JBoss составляет 20 минут, так что сделайте это на 1 минуту.
  3. Реализуйте механизмы Keep-Alive из вашего апплета. Это может быть очень просто. Просто выполните HTTP, получайте каждые 30 секунд до специального URL, который ничего не делает. Это поддержат вашу сессию.

Это решение должно быть дополнением к вашему существующему решению, которое работает 3/4 времени.

Надеюсь, это поможет. Удачи.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top