Я делаю сервер / клиентскую программу на Java, используя RMI. Когда происходит сбой сервера, это не проблема, клиенты получают RemoteException и отключаются.
Однако у меня проблемы при сбое клиентов. Мой сервер использует таймер для проверки всех клиентских объектов время от времени, когда он не получает никакого соединения с клиентом, он обнаружит RemoteException.
Затем предполагается удалить клиентский объект с сервера (просто удалив его из списка), но это невозможно, потому что, когда я пытаюсь что-либо сделать с прокси-клиентским объектом, он вызывает другое RemoteException. Как я могу решить эту проблему?
List<User> users;
Map<User, IClient> clients;
class PingClients extends TimerTask {
public void run() {
for (IClient client : clients.values())
try {
client.ping();
} catch (RemoteException e) {
//removeClient(client); GENERATES REMOTEEXCEPTION
}
}
}
public boolean removeClient(IClient c) throws RemoteException{
User u = c.getUser();
users.remove(u);
clients.remove(u);
for (IClient client : clients.values())
client.updateUsers(users);
}