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