Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RMI и игровой сервер 
:(
    Опции темы
BobiKK
Дата 20.5.2007, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 655
Регистрация: 1.12.2005
Где: Essen, Deutschlan d

Репутация: нет
Всего: 16



В общем, задали в универе написать некое подобие MMORPG. Мало того, что никто не имеет понятия, как вообще делаются онлайн игры, так и в жабке все профаны. Но не в этом дело. Преподы советуют использовать RMI. Отсюда возникает вопрос: оправдано ли это? Всегда считал, что RMI замена SOAP. Но на SOAP'е игровые серевера не пишут. Куча запросов к серверу приведет к порождению такой же кучи потоков, синхронизирация тяжелее, клиентов не поброадкастишь.
Хотелось бы услышать ваше мнение.


P.S. А если у кого-нить есть что-нибудь про программирование онлайн игр, то поделитесь ссылочкой. Буду премного благодарен.
PM MAIL   Вверх
powerOn
Дата 20.5.2007, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 2
Всего: 159



Я думаю, что RMI тут вполне оправдан. 
1) Он простой. Его легко использовать.
2) В отличии от WebServices (SOAP) позволяет организовать callback.

Второе, ИМХО, это самое важное преимущество.

Добавлено через 48 секунд
самое важное для этой задачи...  smile 


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Platon
Дата 24.5.2007, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 3
Всего: 40



Присоединюсь к обсуждению.

А по тяжести? не слишком ли тяжело будет? если брать во внимание не университетский проект, а какой-нибудь средненький некоммерческий проект.

Я тут маюсь сижу, даже не сериализацию, а просто по протоколу своему делаю. Это что уже безнадежно устарело? или как говорится "экономия на спичках", надеясь сэкономить байты трафика? если отбросить удобство и возможность ошибок, этот способ еще существует?

Сам же приведу один минус этого подхода. Накинуть на серв пару железяк будет гораздо дешевле, чем нанимать команду людей, пишущих экономные продукты.

Где-то тут на форуме заметил фразу, что RMI-клиента можно сделать будет только на Java.


Это сообщение отредактировал(а) Platon - 24.5.2007, 15:57
PM MAIL ICQ   Вверх
powerOn
Дата 24.5.2007, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 2
Всего: 159



Цитата(Platon @  24.5.2007,  16:53 Найти цитируемый пост)
Где-то тут на форуме заметил фразу, что RMI-клиента можно сделать будет только на Java.

есть мнение, что если RMI-IIOP сделать, то можно не только Java-вой подключаться, правда тут некоторые возможности RMI теряются... Но нужно ли подключать не java клиентов? ...
Вот еще в догонку сравнение CORBA и WS. Интересная статья.

Впрочем, вопрос организации серверов меня тоже весьма волнует. Мне тоже интересно знать, как лучше все это сделать. Такие характеристики как простота разработки/надежность/функциональность/производительность обычно уступают по показателям друг другу от технологии к технологии... и в этом наверное одна из главных проблем.

Думаю, что написание сервера на голых сокетах тоже имеет смысл, но здесь придется много кода писать.



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Platon
Дата 26.5.2007, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 3
Всего: 40



Цитата(powerOn @  24.5.2007,  21:26 Найти цитируемый пост)
Думаю, что написание сервера на голых сокетах тоже имеет смысл, но здесь придется много кода писать.

Звучит обнадеживающе, я рад, что еще не устарел.

Не почуствовал какой-то сложности при письме кода, может по неопытности, может по удачно найденному подходу, немного больше кода чем сериализация. Но зато душа радуется, от того, что все байты у тебя идут по делу, ты все контролируешь.

От нескольких игроков слышал, что порой они отказывались от игр из-за того что они слишком много кушают трафика, и готовы играть в игры попроще, но более экономные.
PM MAIL ICQ   Вверх
LSD
Дата 26.5.2007, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 19
Всего: 538



Цитата(Platon @  26.5.2007,  01:12 Найти цитируемый пост)
От нескольких игроков слышал, что порой они отказывались от игр из-за того что они слишком много кушают трафика, и готовы играть в игры попроще, но более экономные.

Это все зависит от того есть ли похожие игры, но с меньшим потреблением трафика и от целевой аудитории. Я не думаю что есть много народу отказавшегося от WoW из-за трафика. Да и служебной информации в RMI не так много, чтобы она создала проблему с трафиком. Тут важнее оптимизация самих передаваемых данных.

Преимущество сокетов состоит в скорости и маштабируемости. При спользовании RMI каждый раз идет создание нового коннекта, на каждый вызов создается свой поток, и объекты постоянно сериализуются. При работе в локальной сети с малым количеством клиентов, это не проблема, а вот для интернет сервера у которого тысячи клиентов - это уже проблематично.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
ekr
Дата 27.5.2007, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

Репутация: нет
Всего: 19



Remote Method Invocation (RMI) - стандартная java-технология удаленных вызовов, нужные классы входят в JRE. RMI может работать поверх двух протоколов: JRMP (использовался раньше, по-моему, до версии 1.3 jdk) и IIOP. JRMP - чисто rmi-ный протокол, а вот IIOP - это протокол технологии CORBA.
RMI/JRMP  предлагает несколько довольно приятных фич, зато RMI/IIOP позволяет использовать для java-сервера в качестве клиента не только java-приложение.
Это, как говориться, For Your Information )

А что касается выбора протокола, то сначала стоит задуматься, каков будет сервер... BobiKK, ты планируешь самостоятельно писать сервер? Или, может, воспользоваться технологией J2EE и написать только серверные компоненты с использованием существующего контейнера? Что преподы хотят?

В любом случае, когда речь заходит о многопользовательском приложении в internet, стоит учитывать, что есть файерволы и пр. Лучше использовать стандартный http, он отлично будет ходить из корпоративных локалок со злобными админами )) Поверх http можешь пустить любой протокол, тот же rmi (хотя http-tunelling штука геморройная), но чаще всего это будет web-services из-за богатого набора уже написанных библиотек. К тому же, web-services поддерживают семантику  document style.

Мораль: если проект будет коммерческим, тут надо всерьез подумать ) А если это курсовая, то используй rmi. Почему rmi? Потому что из всех альтернатив ты затратишь минимум времени для написания максимально примитивного сервера, и останется больше времени попить пивка )))))

Добавлено через 2 минуты и 13 секунд
Цитата

Но на SOAP'е игровые серевера не пишут.

пишут. взять ту же Second Life.


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
Platon
Дата 27.5.2007, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 3
Всего: 40



Цитата(ekr @  27.5.2007,  10:58 Найти цитируемый пост)
если проект будет коммерческим, тут надо всерьез подумать

Не совсем коммерческий, но расчитанный на серьезные цели.
Какие критерии стоит учесть?
PM MAIL ICQ   Вверх
powerOn
Дата 27.5.2007, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 2
Всего: 159



     Выскажусь немного по поводу HTTP.
Как мне всегда казалось, протокол HTTP (HyperText Transport Protocol) изначально создавался для клиент-северных систем работающих по принципу клиент запросил - сервер дал. Т.е. клиенту нужна страница, он делает запрос с некими параметрами, а в ответ получает страницу, содержание которой, возможно, зависит от переданных параметров. Это все. Цель подобной системы - получение web-страниц о чем впрочем и говорит название протокола. ИМХО, не больше. HTTP-сервер не может быть инициатором передачи данных, он ведомый, он только отвечает. 

    А что нужно для игры? Или например для собственного чата или instance messaging-a?
Необходимо что бы данные отправлялись just in time (тогда, когда это действительно необходимо).  Клиенту есть что сказать серверу? Отлично, клиент отправляет серверу данные. Серверу есть что сказать клиенту? Великолепно, сервер отправляет клиенту данные. Никто никого не долбит запросами типа: "ну что, обновились данные?". Трафик экономится.

   Так что же позволяет нам WS построенные поверх HTTP? 
Только запросы клиента. По такому принципу прекрасно строится простой RPC - сделал вызов, получил ответ. Это значит, что бы клиенту вовремя получить изменённые данные нужно сервер постоянно опрашивать, а это просто мега нагрузка на сеть и на сервер.

   Как же быть?   
Выход очевиден: callback - клиент регистрируется на сервере и когда последнему необходимо, то он может начать взаимодействие с клиентом. Получается, что клиента (в том смысле, в каком говорилось ранее) по сути нет... есть 2 сервера. Но клиентский сервер достаточно лёгок по сравнению с общим для всех клиентов бизнес-сервером. 

[IMHO]
    По поводу HTTP-тунелинга.
... Насколько я понимаю http-тунелинг это маскирование одного протокола под http. Или, говоря проше, использование основного протокола поверх http. HTTP в данном случае как бы для транспорта идёт. Вот при таком раскладе, я одного не могу понять: зачем закрывать порты и использовать http-тунелинг? Ответ наверное будет таким: это обеспечение  безопасности. Возможно... но как по мне, использовать HyperText Transport Protocol (!) для организации RPC лишь только по тому, что некоторые админы закрываю порты - это извращение. ИМХО, это как надеть боксёрские перчатки и при этом жаловаться, что мол носки одевать не удобно. ... а ведь люди еще обходные пути придумывают, тунелинги всякие...
[/IMHO]

Это были рассуждения на первый взгляд. Поправьте меня если что не так.

P.S.: Хотя я слышал, что если используя HTTP не закрывать соединение после пришедшего запроса, то так же можно организовать callback. Слышать я конечно слышал, но примеров не видел, тем более высокоуровневых библиотек позволяющих построить подобное взаимодействие. Еще видел пару статей об WS-callback, но насколько я понял, это просто возможность асинхронного вызова метода сервиса, а не регистрация клиента для длительного взаимодействия.




--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Platon
Дата 27.5.2007, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 3
Всего: 40



Цитата(powerOn @  27.5.2007,  14:45 Найти цитируемый пост)
Выход очевиден: callback - клиент регистрируется на сервере и когда последнему необходимо, то он может начать взаимодействие с клиентом. Получается, что клиента (в том смысле, в каком говорилось ранее) по сути нет... есть 2 сервера. Но клиентский сервер достаточно лёгок по сравнению с общим для всех клиентов бизнес-сервером. 


По курсу ТВП по этому поводу был жирный минус, что соединение в сторону клиента категорически не рекомендуется в соображениях безопасности.
PM MAIL ICQ   Вверх
powerOn
Дата 27.5.2007, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 2
Всего: 159



Цитата(Platon @  27.5.2007,  17:05 Найти цитируемый пост)
По курсу ТВП по этому поводу был жирный минус, что соединение в сторону клиента категорически не рекомендуется в соображениях безопасности. 


Вот и дилемма. Соединение в сторону клиента нельзя, сервер долбить запросами нельзя.... Как тогда быть?

P.S. Думаю, что клиент с сервером взаимодействуют при одном открытом соединении. Т.е. соединение открывается и не закрывает пока программа не завершится. При этом постоянная передача данных не идет, хотя обе стороны могут уведомлять друг друга от различных событиях. (Но я могу ошибаться).


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
COVD
Дата 29.5.2007, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 11
Всего: 43



Цитата

Вот и дилемма. Соединение в сторону клиента нельзя, сервер долбить запросами нельзя.... Как тогда быть?


Соединение в сторону клиента бывает просто невозможно создать. По причине, на которую указал выше ekr (корпоративные локалки и злобные админы). Остается "долбить" сервер http запросами. Но здесь есть некоторые возможности для маневра. 

Во-первых, периодически сервер и клиент должны обмениваться пингом (heartbeat, пульс) даже если им нечего друг другу сказать. Это единственный надежный способ проверить, что соединение с противоположной стороной не умерло. Разумеется, это актуально, если соединение рассматривается как постоянное, т.е. есть какие-то ресурсы, привязанные к соединению и которые желательно немедленно освободить в случае его разрыва.

Во-вторых, зависит от характера обмена. Если основной поток данных идет с сервера на клиент, то клиент посылает запрос "давай данные" и сервер посылает данные сколь угодно долго. Таким образом запрос на данные с сервера может происходить не часто. А вот на сервер так посылать данные не получается. Согласно http запрос post отправляется целиком, т.е. нельзя отсылать данные на сервер по мере необходимости в одном запросе. Это связано с тем, что сначала отправляется размер данных и потом уже сами данные. Стандартные http клиенты так и работают. Поэтому если клиент должен часто отправлять информацию на сервер, то каждая новая порция данных должна оформляться в виде нового запроса. Однако и это не так страшно, потому что физически соединение может быть использовано повторно, т.е. оно не обязательно всякий раз убивается, но это зависит от промежуточных серверов, через которые осуществляется соединение.

Стандартный подход, на мой взгляд, состоит в том, что приложение сначала пытается соединиться с сервером по tcp протоколу. В случае неудачи переходит на http (тунеллинг. Если интенсивность обмена мала, то для упрощения можно ограничиться только http). Такой же подход реализован в RMI. Казалось бы, это очень привлекательно, что транспортный слой RMI берет на себя все заботы. Однако, насколько я знаю, для этого надо предоставить сервлет и, соответственно, контейнер (Томсат), т.е. это не встроено в RMI. Поэтому у меня некоторые сомнения относительно удобства RMI в этом контексте и такого опыта нет.  

Цитата

Сам же приведу один минус этого подхода. Накинуть на серв пару железяк будет гораздо дешевле, чем нанимать команду людей, пишущих экономные продукты.


С серверами обычно никаких проблем не бывает, потому что можно поставить сервера и соединение нужной мощности. Проблемы с клиентами. Они все разные. Чем выше и изощренней требования к клиентской части, тем меньше клиентов. Шлифовать то, что облегчает жизнь клиентскому компьютеру, очень даже полезно. Большинство же технологий придуманы для ускорения девелопмента. И часто именно клиент расплачивается за это ресурсами своего компьютера. 


Это сообщение отредактировал(а) COVD - 29.5.2007, 20:12
PM MAIL   Вверх
Platon
Дата 29.5.2007, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 3
Всего: 40



Цитата(COVD @  29.5.2007,  19:07 Найти цитируемый пост)
И часто именно клиент расплачивается за это ресурсами своего компьютера. 

Хотелось бы побольше об этом узнать, на сколько клиенту приходится расплачиваться?

Цитата(COVD @  29.5.2007,  19:07 Найти цитируемый пост)
Однако, насколько я знаю, для этого надо предоставить сервлет и, соответственно, контейнер (Томсат), т.е. это не встроено в RMI.


Делал лабораторную работу по RMI, ничего лишнего не надо было.
Вот батник запуска сервера
Код

rmic Lab4.Server.Server
start rmiregistry 8888
java Lab4.Server.Server


Вот клиента:
Код

java -Djava.security.policy=file:perm.policy Lab4.Client.Client

PM MAIL ICQ   Вверх
COVD
Дата 29.5.2007, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 11
Всего: 43



Цитата

Хотелось бы побольше об этом узнать, на сколько клиенту приходится расплачиваться?


Если у клиента медленная линия или ограничения по трафику, то наверное пересылка голых байтов предпочтительнее xml-файлов. Когда линия не справляется возникают паузы и обрывы связи.
Если у клиента недостаточно памяти или слишком много приложений запущено, то же самое. Претензии будут к провайдеру сервиса, которому деньги платятся.     
PM MAIL   Вверх
powerOn
Дата 31.5.2007, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 2
Всего: 159



Модератор: Разделил тему на две. Про игру "девятку" создана новая тема здесь.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0676 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.