| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Работа с сетью > Может ли RMI-сервер вызвать метод RMI-клиента ? |
| Автор: VAB 20.10.2010, 03:28 |
| Здравствуйте! Ситуация такая: есть RMI-сервер и RMI-клиент. Клиент вызывает методы сервера и получает все необходимые данные. Но теперь надо сделать так, чтобы после того как на сервере обновилась сумма счета пользователя, она должна обновляться в соответствующем поле в клиентской программе. Т.е. клиент должен принимать запрос от сервера. Можно ли это сделать на RMI и как? Если нельзя, то что посоветуете выбрать? PS Опрос клиентом сервера по периоду не подходит - возрастет ненужная нагрузка на сервер сродни DDOS-атаке. Заранее спасибо! |
| Автор: sergioK 20.10.2010, 10:10 | ||
то есть клиент он одновременно и клиент и сервер , RMI это 100% уу Яна Дарвина в книге есть пример |
| Автор: jk1 20.10.2010, 10:42 |
| Есть такой прием, RMI Callback. Он позволяет серверу вызывать методы клиента. http://java.sun.com/developer/onlineTraining/rmi/exercises/RMICallback/index.html |
| Автор: Skipy 20.10.2010, 12:54 | ||||
Особенно он хорош при наличии какого-нибудь десятка тысяч клиентов, которые сервер должен уведомлять. Лучший способ завалить сервер быстро и качественно. Добавлено @ 13:00
Можно, но не нужно. Сервер ПРЕДНАЗНАЧЕН для опросов. И при нормальном построении pull даже раз в секунду от 10000 клиентов он выдержит спокойно. А вот уведомление этих же 10000 клиентов раз в секунду - оно его завалит. Особенно когда пятьсот клиентов уже отвалилось, полторы тысячи сидит за прокси, у трех тысяч слабый канал и длительные задержки. Всё это ляжет на плечи сервера - и обработка ошибок соединений, и поддержка списка активных клиентов - неблагодарное занятие, - и ожидания при передаче. А на деле в конце концов окажется, что обновления раз в минуту было более чем достаточно, и его можно было свободно инициировать со стороны клиента. В общем, я Вам настоятельно рекомендую сначала сделать стандартный вариант - периодический опрос. И посмотреть, действительно ли нагрузка на сервер возрастет настолько, что с этим надо разбираться таким образом. И не является ли возрастание нагрузки следствием неграмотно написаного серверного кода. |
| Автор: VAB 21.10.2010, 03:39 |
| Разобрался - во всех случаях происходит передача удаленного объекта с клиента на сервер. Ян Дарвина просто посмотрел, второй пример немного улучшил и упростил. Что касается философии проектирования - есть над чем подумать. В данном случае достаточно не то что раз в минуту обновлять, а вообще предоставить пользователю самому обновлять поле. Если учесть вышесказанное про прокси и отвалившиеся клиенты, то резонно пока сделать односторонний вызов. Благодарю всех за ответы, очень ценная для меня инфа! |