Концепция Java RMI - PullRequest
       11

Концепция Java RMI

0 голосов
/ 17 апреля 2011

Я пытаюсь реализовать простое приложение чата, которое соединяет клиентов через центральный сервер с другим клиентом, чтобы они могли обмениваться сообщениями и файлами. Мне также нужно реализовать систему уведомлений. например, если пользователь подписывает успешно или его приятель подписывает, он получает уведомление. Теперь, как это реализовано в мире RMI? Я думал о том, чтобы иметь удаленный объект «класс соединения», который клиенты вызывают из него методы, такие как «вход в систему», «отключение» и т. Д. А что касается классов инфраструктуры уведомлений, они тоже должны быть удаленными? или они могут лежать на сервере? спасибо

1 Ответ

1 голос
/ 17 апреля 2011

Обмен сообщениями о событиях между удаленными системами немного сложен. Вот что должно произойти:

  • Клиент должен зарегистрировать интерес к событиям, запущенным на стороне сервера. Для регистрации клиент должен быть удаленно доступен для объекта источника события.

  • Чтобы иметь возможность зарегистрироваться, клиент должен сначала найти сервер, поэтому объект сервера должен быть удаленно доступен для клиента.

Крик, верно? И это простой шаблон для реализации удаленной обработки событий. Несколько недель назад я начал учебник, который был направлен по этому пути - он прямо здесь, и я надеюсь добавить что-то к нему до конца недели. Увы, необходимость сделать арендную плату помешала, и я не могу добавить к ней так быстро, как хотелось бы. Если вы не можете ждать, однако, это ключ: обе стороны должны быть доступны удаленно для работы системы обмена сообщениями.

этот сервер, а также клиент должны быть удаленными объектами.

Пусть все клиенты реализуют интерфейс Remote.

RemoteClientIfc extends Remote {
    void inform();
}

//have a remote method register() on the *Server* object which accepts RemoteClientIfc.
//c'd be something like this...
register(RemoteClientIfc client){
    arrayListofClients.add(client);
}

//So client will do a look up on the remote server object and register itself.
remoteObj.register(clientInstance);

//In the remote server you
//can probably have another method to send notifications to the client.
//Run through the ArrayList and call 
//inform() on each of them.
//Thus the client will receive notification.
tellClients(){
    Iterator i = ....
    while (i.hasNext()){
        ((RemoteClientIfc).i.next()).inform();
    }
}
...