концепция java rmi

#java #chat #rmi

#java #Чат #rmi

Вопрос:

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

Ответ №1:

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

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

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

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

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

Позвольте всем клиентам реализовать удаленный интерфейс.

 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();
    }
}