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

Поиск:

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

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



Цитата(ivg @  23.1.2009,  19:31 Найти цитируемый пост)

Можно воспользоваться скриптовыми возможностями Java. Если производительность во главе угла - то "hot redeploy"(замена/добавление классов без остановки приложения). Это практически стандартная фича всех серверов приложений. 


Не покатит для онлайн игры. Там надо 24\7, а редеплой, вроде как, убивает полносттью приложение, потом снова развертывает. Разве что где-то в родительском уровне оставлять критические данные, в общем не разбирался с этим вопросом, тут спорить не буду.

Но сервер приложений просто не нужен тут...
Цитата(ivg @  23.1.2009,  19:31 Найти цитируемый пост)
 Зуб даёте? smile

Если бы я писал сервер, то дал бы smile Не первый год копаюсь в игровых серверах.


Цитата(ivg @  23.1.2009,  19:31 Найти цитируемый пост)
 Вспоминаем отладку из под IDE для серверов приложений... 

Что дебажить то? Искходники которые в базе данных? Не получится smile



Цитата(Temdegon @  23.1.2009,  19:52 Найти цитируемый пост)
Млин, нигде не могу найти примеров серверов. Все что попадается это однотипные примерчики, где клиент посылает пару байт, сервер их читает и посылает ответ.


l2jserver.com
aion-emu.com


Цитата(Temdegon @  23.1.2009,  19:52 Найти цитируемый пост)
Вопрос по многопоточности.
Изначально я представлял себе так: для каждого нового соединения (пользователя) создается отдельный поток, в котором уже обрабатываются все его команды. Но насколько это хорошее решение? Может все-таки делать так же как уже сделано, т.е. все в одном потоке? 


Что первое что второе - ничего хорошего.


В кратце:
Есть пакет java.nio. Смотрите туториалы по нему
Тальше есть пакет java.util.concurrent, в нем смотрите на ThreadPoolExecutor и прочее.

Грубо говря:

Поток(и) с  Selector"ом смотрят следят за ServerSocketChannel в неблокирующемся режиме, принимают, отсылают данные.

Данные формируются в некоторые структуры, которые передаются на выполнение трид пулу.
После выполнения нужные данные передаются на отправку потоку(ам) Selector"а, который(е) уже непосредственно отсылает данные.

Главное помнить что поток(и) Selector"а не должны делать ничего кроме чтения\записи клиентских данных. Все задания по любым действиям передаются на выполнение пулу потоков. 

Это сообщение отредактировал(а) SoulKeeper - 23.1.2009, 20:21
PM MAIL   Вверх
Temdegon
Дата 23.1.2009, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 7
Всего: 9



SoulKeeper, в целом схема понятна. Не понятно в каком случае нужен один поток с селектором а в каком несколько? Или несколько потоков как раз нужны что бы можно было параллельно слать команды клиента (как в примере с командой анимации удара)?
PM MAIL   Вверх
ivg
Дата 23.1.2009, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


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

Репутация: 33
Всего: 81



Цитата(SoulKeeper @  23.1.2009,  22:21 Найти цитируемый пост)
Если бы я писал сервер, то дал бы smile Не первый год копаюсь в игровых серверах.

Но ведь вы не знаете ни требований, ни игровой сложности, ни мощности железа ну и т.д.
Цитата(SoulKeeper @  23.1.2009,  22:21 Найти цитируемый пост)
Что дебажить то? Искходники которые в базе данных? Не получится

Исходники у вас в IDE, скомпилированные классы деплоите в БД, ну а в остальном всё аналогично отладке приложений на Application серверах, с учётом того что сервер умеет грузить классы из БД.
Temdegon, возьмите готовый движок игрового сервера, ссылок накидали, там в исходниках вы найдёте ответы на эти вопросы. Да и быстрее получится и постабильнее будет, чем если вы с нуля начнёте свой велосипедсервер ваять. smile 
PM MAIL   Вверх
SoulKeeper
Дата 23.1.2009, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

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



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

Добавлено @ 21:10
Цитата(ivg @  23.1.2009,  21:08 Найти цитируемый пост)
Исходники у вас в IDE, скомпилированные классы деплоите в БД, ну а в остальном всё аналогично отладке приложений на Application серверах, с учётом того что сервер умеет грузить классы из БД.


Я предпологал что исходники в БД smile
Мы же вроде функционал аналогичный php обсуждаем. Естественно что если исходники в IDE то проблем нет smile

Добавлено @ 21:12
Цитата(ivg @  23.1.2009,  21:08 Найти цитируемый пост)
Но ведь вы не знаете ни требований, ни игровой сложности, ни мощности железа ну и т.д.


Судя по тому что это игра - траффика будет кушать не много, до 5 мегабайт за час.
На железе под серьйозные проекты не жлобятся. Ну а если "потыкать", то даже не стоит рыпаться.
Игровая сложность - если php справлялся, то java и подавно smile

Хотя по хорошему надо было бы посмотреть со всех сторон.

Это сообщение отредактировал(а) SoulKeeper - 23.1.2009, 21:25
PM MAIL   Вверх
Temdegon
Дата 23.1.2009, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 7
Всего: 9



Попробую полистать книжку по nio, вдруг пойму что-то... С пул ThreadPoolExecutor-ом я с недавнего времени знаком. Хочется написать так, что бы в корне поменять отношение фирмы к Java... Хочется верить, что все получится. Насчет производительности - ПХП-сервер мы тестировали, запустив его на обычной рабочей машие, 3 человека - реальных людей с других компов и 50 ботов на одной локации. В общем сервер показал себя в лучшем свете, производительность уперлась в клиент а не в сервер. Но тут реальных клиентов всего 3, все это в локальной сети. Так что это получился скорее тест флеш-движка, а не сервера. На большом кол-ве клиентов, коннектящихся через медленные каналы я думаю все выглядело бы не так здорово. Но проверить это нет возможности. Надо придумать какой-то способ тестирования, но мыслей по этому поводу нет. Не нанимать же сотню тестеров для этих целей.
Всем спасибо за дельные советы. Буду читать, разбираться и пробовать.
PM MAIL   Вверх
Temdegon
Дата 23.1.2009, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 7
Всего: 9



Возник такой спор. Есть ли смысл использовать многопоточность вобще? 
Опишу ситуацию более конкретно.
есть 20 клиентов, которым нужно послать сообщение.
в сервере это реализуетя так:
для этого прогоняется цилк по массиву пользователей и для каждого выполняется команда
Код

$result = socket_write(сокет, строка)

ВОпрос в следующем: ждет ли цикл, пока данные передадутся и вернется результат, или оно просто послало и все?
Если ждет, то многопоточность имеет большой смысл, а если нет, то вроди как это даст не очень много.
Опишите плиз плюсы и минусы использования многопоточности в данной ситуации
PM MAIL   Вверх
COVD
Дата 24.1.2009, 04:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

ВОпрос в следующем: ждет ли цикл, пока данные передадутся и вернется результат


Врядли. Пишут обычно во внутренний буфер, т.е. в отличие от чтения нет смысла эту операцию блокировать. 

Однопоточная реализация на nio наверняка имеет преимущество, когда много постоянных соединений, но активных среди них мало. Если все постоянно соединенные  активны ( все смотрят видеотрансляцию с сервера ), то злые языки шепчут, что один поток на клиента ( io ), возможно, поэффективней будет.

Начинать проще на Java, чем на С++.
PM MAIL   Вверх
Temdegon
Дата 24.1.2009, 04:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 7
Всего: 9



Цитата

ВОпрос в следующем: ждет ли цикл, пока данные передадутся и вернется результат
Цитата

Врядли. Пишут обычно во внутренний буфер, т.е. в отличие от чтения нет смысла эту операцию блокировать. 


Придется каким-то боком проверить экспериментально. Есть мысль попробовать запустить локально сервер и несколько клиентов, но заставить клиентов работать через внешний прокси, что бы внести задержки. Тогда будет возможно сравнить однопоточный и многопоточный способ в разных вариациях, с разными задержками и различным кол-вом клиентов. 
PM MAIL   Вверх
COVD
Дата 24.1.2009, 05:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



 блокирующая ли операция socket_write (если в этом вопрос) наверное проще из документации,
PM MAIL   Вверх
Temdegon
Дата 24.1.2009, 05:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 7
Всего: 9



Пытался читать документацию, гуглил - ответа на этот вопрос не нашел.
PM MAIL   Вверх
53x7u5
Дата 26.5.2010, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Temdegon, позвольте полюбопытствовать, чем закончилось ваша работа над данной задачей? Надеюсь что спустя год вы все еще тут smile
Судя по всему я иду по вашим стопам. Ваш опыт был бы ценен!
PM MAIL   Вверх
Temdegon
Дата 26.5.2010, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 7
Всего: 9



Цитата

Temdegon, позвольте полюбопытствовать, чем закончилось ваша работа над данной задачей? Надеюсь что спустя год вы все еще тут smile
Судя по всему я иду по вашим стопам. Ваш опыт был бы ценен! 

К сожалению, все заглохло даже не начавшись. Не потому что джава не подходит для этого =) Просто появились более интересные проекты. Сервер по сей день на пхп, игра продолжает делаться. Решили, что когда проблемы возникнут, тогда и начнут их решать. Вот есть такая штука http://developers.facebook.com/blog/post/358. Преобразует PHP-код в C++ и компилит его. Вполне может решить проблемы производительности.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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