#java #client-server #rmi #rmiregistry
#java #клиент-сервер #rmi #rmiregistry
Вопрос:
Я программирую простое клиент-серверное приложение с использованием Java-RMI. Я хотел бы знать, когда все клиенты умерли, чтобы закрыть сервер. Проведя некоторые исследования в Интернете, я обнаружил, что могу заставить свой сервер реализовать интерфейс без ссылок и определить метод без ссылок (). Но это, похоже, не работает, и я думаю, это потому, что сервер привязан к RMI-Registry, который, вероятно, содержит ссылку на него.
У кого-нибудь есть идея о том, как я мог бы получать уведомления, когда все клиенты потерпели крах в моем случае?
Спасибо
Ответ №1:
Я думаю, это потому, что сервер привязан к RMI-Registry, который, вероятно, содержит ссылку на него.
Вы правы, RMIRegistry также считается клиентом для целей DGC / без ссылок.
Комментарии:
1. Итак, как бы вы проверили, разбились ли клиенты в моем случае? Я использую обходной путь, который отправляет их через определенные промежутки времени, но, на мой взгляд, это менее надежно, поскольку клиентское приложение могло аварийно завершиться, но хост-клиент все еще может быть запущен…
2. Это единственный способ. Если у вас нет объекта, который привязан к реестру, быть только своего рода объектом входа в систему, который возвращает экземпляры сеанса для каждого клиента, которые не привязаны к реестру. Когда вызывается Session.unreferenced(), его (единственный) клиент ушел, поэтому он может делать с этим все, что захочет, например, не экспортировать себя. На самом деле вам все равно, если у объекта Login нет клиентов. Различие между сбоем клиента и сбоем хоста клиента мне не кажется актуальным. Что вас интересует, так это работоспособность всей системы, включая клиента.
3. Интересно. Ваш подход — действительно разумный способ сделать это. Но я думаю, что буду придерживаться моего подхода, основанного на ping, для этого проекта. Спасибо за разъяснения.
4. @Жан Готье, конечно. В сеансовом подходе есть много других возможностей, таких как автоматическое состояние для каждого клиента, если вам это нужно. Но это ваш дизайн.