![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
SoulKeeper |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 14.1.2007 Где: Ukraine, Lviv. Репутация: 11 Всего: 15 |
Не покатит для онлайн игры. Там надо 24\7, а редеплой, вроде как, убивает полносттью приложение, потом снова развертывает. Разве что где-то в родительском уровне оставлять критические данные, в общем не разбирался с этим вопросом, тут спорить не буду. Но сервер приложений просто не нужен тут... Если бы я писал сервер, то дал бы ![]() Что дебажить то? Искходники которые в базе данных? Не получится ![]()
l2jserver.com aion-emu.com Что первое что второе - ничего хорошего. В кратце: Есть пакет java.nio. Смотрите туториалы по нему Тальше есть пакет java.util.concurrent, в нем смотрите на ThreadPoolExecutor и прочее. Грубо говря: Поток(и) с Selector"ом смотрят следят за ServerSocketChannel в неблокирующемся режиме, принимают, отсылают данные. Данные формируются в некоторые структуры, которые передаются на выполнение трид пулу. После выполнения нужные данные передаются на отправку потоку(ам) Selector"а, который(е) уже непосредственно отсылает данные. Главное помнить что поток(и) Selector"а не должны делать ничего кроме чтения\записи клиентских данных. Все задания по любым действиям передаются на выполнение пулу потоков. Это сообщение отредактировал(а) SoulKeeper - 23.1.2009, 20:21 |
|||
|
||||
Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: 7 Всего: 9 |
SoulKeeper, в целом схема понятна. Не понятно в каком случае нужен один поток с селектором а в каком несколько? Или несколько потоков как раз нужны что бы можно было параллельно слать команды клиента (как в примере с командой анимации удара)?
|
|||
|
||||
ivg |
|
||||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 33 Всего: 81 |
Но ведь вы не знаете ни требований, ни игровой сложности, ни мощности железа ну и т.д.
Исходники у вас в IDE, скомпилированные классы деплоите в БД, ну а в остальном всё аналогично отладке приложений на Application серверах, с учётом того что сервер умеет грузить классы из БД. Temdegon, возьмите готовый движок игрового сервера, ссылок накидали, там в исходниках вы найдёте ответы на эти вопросы. Да и быстрее получится и постабильнее будет, чем если вы с нуля начнёте свой велосипедсервер ваять. ![]() |
||||
|
|||||
SoulKeeper |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 14.1.2007 Где: Ukraine, Lviv. Репутация: 11 Всего: 15 |
В теории, больше потоков селекторов ускорят запись\чтение в канал. На практике не скажу, не проверял
![]() Добавлено @ 21:10 Я предпологал что исходники в БД ![]() Мы же вроде функционал аналогичный php обсуждаем. Естественно что если исходники в IDE то проблем нет ![]() Добавлено @ 21:12
Судя по тому что это игра - траффика будет кушать не много, до 5 мегабайт за час. На железе под серьйозные проекты не жлобятся. Ну а если "потыкать", то даже не стоит рыпаться. Игровая сложность - если php справлялся, то java и подавно ![]() Хотя по хорошему надо было бы посмотреть со всех сторон. Это сообщение отредактировал(а) SoulKeeper - 23.1.2009, 21:25 |
|||
|
||||
Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: 7 Всего: 9 |
Попробую полистать книжку по nio, вдруг пойму что-то... С пул ThreadPoolExecutor-ом я с недавнего времени знаком. Хочется написать так, что бы в корне поменять отношение фирмы к Java... Хочется верить, что все получится. Насчет производительности - ПХП-сервер мы тестировали, запустив его на обычной рабочей машие, 3 человека - реальных людей с других компов и 50 ботов на одной локации. В общем сервер показал себя в лучшем свете, производительность уперлась в клиент а не в сервер. Но тут реальных клиентов всего 3, все это в локальной сети. Так что это получился скорее тест флеш-движка, а не сервера. На большом кол-ве клиентов, коннектящихся через медленные каналы я думаю все выглядело бы не так здорово. Но проверить это нет возможности. Надо придумать какой-то способ тестирования, но мыслей по этому поводу нет. Не нанимать же сотню тестеров для этих целей.
Всем спасибо за дельные советы. Буду читать, разбираться и пробовать. |
|||
|
||||
Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: 7 Всего: 9 |
Возник такой спор. Есть ли смысл использовать многопоточность вобще?
Опишу ситуацию более конкретно. есть 20 клиентов, которым нужно послать сообщение. в сервере это реализуетя так: для этого прогоняется цилк по массиву пользователей и для каждого выполняется команда
ВОпрос в следующем: ждет ли цикл, пока данные передадутся и вернется результат, или оно просто послало и все? Если ждет, то многопоточность имеет большой смысл, а если нет, то вроди как это даст не очень много. Опишите плиз плюсы и минусы использования многопоточности в данной ситуации |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Врядли. Пишут обычно во внутренний буфер, т.е. в отличие от чтения нет смысла эту операцию блокировать. Однопоточная реализация на nio наверняка имеет преимущество, когда много постоянных соединений, но активных среди них мало. Если все постоянно соединенные активны ( все смотрят видеотрансляцию с сервера ), то злые языки шепчут, что один поток на клиента ( io ), возможно, поэффективней будет. Начинать проще на Java, чем на С++. |
|||
|
||||
Temdegon |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: 7 Всего: 9 |
Придется каким-то боком проверить экспериментально. Есть мысль попробовать запустить локально сервер и несколько клиентов, но заставить клиентов работать через внешний прокси, что бы внести задержки. Тогда будет возможно сравнить однопоточный и многопоточный способ в разных вариациях, с разными задержками и различным кол-вом клиентов. |
||||
|
|||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
блокирующая ли операция socket_write (если в этом вопрос) наверное проще из документации,
|
|||
|
||||
Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: 7 Всего: 9 |
Пытался читать документацию, гуглил - ответа на этот вопрос не нашел.
|
|||
|
||||
53x7u5 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 26.5.2010 Репутация: нет Всего: нет |
Temdegon, позвольте полюбопытствовать, чем закончилось ваша работа над данной задачей? Надеюсь что спустя год вы все еще тут
![]() Судя по всему я иду по вашим стопам. Ваш опыт был бы ценен! |
|||
|
||||
Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: 7 Всего: 9 |
К сожалению, все заглохло даже не начавшись. Не потому что джава не подходит для этого =) Просто появились более интересные проекты. Сервер по сей день на пхп, игра продолжает делаться. Решили, что когда проблемы возникнут, тогда и начнут их решать. Вот есть такая штука http://developers.facebook.com/blog/post/358. Преобразует PHP-код в C++ и компилит его. Вполне может решить проблемы производительности. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |