12-22-2012, 08:00 PM
Собственно так как на этом форуме собирается масса людей работающих с серверами а именно серверами lineage 2 java. Интересует вопрос организации архитиктуры сервера, каким образом там все работает, какой протакол используется.
Приведу мой пост на другом форуме
По поводу архитектуры Аллоды онлайн, дам ссылку, может кому интересно будет, кстате советую всем глянуть кто работает с java, человек расказывает о плюсах и минусах, и почему они выбрали именно ее.
http://rutracker.org/forum/viewtopic.php?t=2961984
От вас интересует все таки, брать java или C#?) и интересно как организован сервер lineage2, рытся в исходниках не какого желания нет, да и с java я не знаком, учить пока не берусь, вот пока теорией запасаюсь, если же все же решу писать на java то думаю первым делом ее изучу и начну смотреть архитиктуру lineage 2 , а пока интересует ваше мнение, что бы вы например изменили если бы вам предстояло писать сервер под клиент lineage 2 с нуля, что вам не нравится в существующем сервере. И еще один вопрос
Откуда собственно появился пиратский сервер на java. На сколько мне изве стно офицальные сервера писались на C++ ,хотя я могу ошибаться, дак вот что все пишут все свои пиратские сервера с нуля, или же есть какая то команда которая собрала сервер на java под клиент, и на основе их сборки вы все уже пилите свои?
Списибо за внимание!)
Приведу мой пост на другом форуме
Пост
Всем привет,позвольте мне потратить пару минут вашего драгоценного времени и рассказать о моей возникшей проблеме
собственно делаю игру и пришел к решению писать свой сервер для mmo, есть конечно и готовые решения но они либо не подходят, либо другие причины.
Перед началом так сказать не легкой работы я решил запастись нужной теорией и подойти к этому серьезно, ведь от того как я реализую структуру взаимодействия клиент-сервер будет зависить многое.
Вот я собрался с мыслями и начал копать теорию, многое просмотрел по поводу архетиктуры mmo серверов, например на торентах есть разбор архитиктуры игры Алоды, многое для себя вынес из их доклада.
Также полазил на тематических форумах и сделал кое какие выводы ,а именно:
Сервер будет следующей структуры:
1.Login Server
1.1 Обработка подключений,регистрация,передача ключа в game server и т.д тоесть все для авторизации. Проверили пустили, или же не пустили, или если регистрируем, проверяем в бд есть ли такой ник, если есть то не регаем, нет заносим новую запись
2.Game Server
2.1 Собственно основной сервер обрабатывающий положение игроков , события, и все все все что с этим связано...
С логин сервером все понятно. Да и game все впринципе понятно, вопрос кроется глубоко внутри...
Дело в том что нужно выбрать протокол, да я согласен врятли мне удастся собрать огромный онлайн но все же, я буду писать с расчетом на онлайн свыше 3000 человек, зачем? все очень просто, это не плохая практика в программировании, и если мне удастся написать такой сервер, то смогу его продовать в будущем, или же использовать сам в своих проектах
И не нужно тролить по этому поводу, а рассмотрим теперь как нам обеспечить игру без лагов когда игроков у нас больше 3000.
Итак, на тематических форумах нашел следующее:
Тоесть основные подводные камни кроются в пакетах, передачи и скорости.
Исходя и этого я стал рыть что же лучше подойдет мне, везде советуют ипользовать UDP о нем то я сейчас и читаю на вики http://ru.wikipedia.org/wiki/UDP
Есть и еще 1 проблема, работая прежде в С# с бд mysql(а сервер будет именно использовать ее) не раз замечал что C# не очень то дружит с ней, всегда использовал mysql connector , и скорость я бы сказал не самая идеальная, или может я что то не так делал... Ну как вам сказать, для простого виндос форм приложения, скорость вполне нормальная, а для сервера, такая скорость записи в бд не пойдет,
Например: Делал простую выборку по базе(проверял существует ли такой emeil приходилось подождать секунду точно, а это ведь всего проверка, а вы представте сколько запросов к бд будет при работе сервера, и т.д)
Что хочется услышать от вас? мнение по этому поводу,а именно: Если бы у вас встала такая задача какой протокол вы бы выбрали ,почему? Как лучше будет работать с mysql. Стоит ли брать C# или же лучше изучать другой язык( я не имею не чего против C# и щитаю что на нем вполне можно реализовать данную задачу, единственное что сервер сможет работать только под Windows, если же его писать например на java(например все пиратские сервера знаменитой lineage 2 написанны на ней) то тогда можно бы было его запускать под пингвином, хотя это не столь принципиально.
Итак, какой же протокол выбрать? как наиболее эфективно передовать данные от клиента к серверу в mmo с наименьшей задержкой и наименьшим трафиком? Стоит ли рыть в сторону UDP? Ведь есть и TCP.
Было бы интересно выслушать ваше мнение по этому поводу)
Спасибо за внимание)
собственно делаю игру и пришел к решению писать свой сервер для mmo, есть конечно и готовые решения но они либо не подходят, либо другие причины.
Перед началом так сказать не легкой работы я решил запастись нужной теорией и подойти к этому серьезно, ведь от того как я реализую структуру взаимодействия клиент-сервер будет зависить многое.
Вот я собрался с мыслями и начал копать теорию, многое просмотрел по поводу архетиктуры mmo серверов, например на торентах есть разбор архитиктуры игры Алоды, многое для себя вынес из их доклада.
Также полазил на тематических форумах и сделал кое какие выводы ,а именно:
Сервер будет следующей структуры:
1.Login Server
1.1 Обработка подключений,регистрация,передача ключа в game server и т.д тоесть все для авторизации. Проверили пустили, или же не пустили, или если регистрируем, проверяем в бд есть ли такой ник, если есть то не регаем, нет заносим новую запись
2.Game Server
2.1 Собственно основной сервер обрабатывающий положение игроков , события, и все все все что с этим связано...
С логин сервером все понятно. Да и game все впринципе понятно, вопрос кроется глубоко внутри...
Дело в том что нужно выбрать протокол, да я согласен врятли мне удастся собрать огромный онлайн но все же, я буду писать с расчетом на онлайн свыше 3000 человек, зачем? все очень просто, это не плохая практика в программировании, и если мне удастся написать такой сервер, то смогу его продовать в будущем, или же использовать сам в своих проектах
И не нужно тролить по этому поводу, а рассмотрим теперь как нам обеспечить игру без лагов когда игроков у нас больше 3000.
Итак, на тематических форумах нашел следующее:
Цитата
В тесте (50байт*5000юзерей*)*(5000+1) за 5 сек а это 1,192 Гб с нормальной загрузкой ЦП
^размер пакета ^колличество отправленных+принятые
то есть за одну сек - 238 Мб
разберем такую ситуацию
Онлайн танки
Х
30 игроков в руме
размер одного пакета =
позиция 12байт
вращение 12байт(оптимально)
поворот турели 4байт
подьем пушки 4байт
позиция снаряда 12байт
поворот снаряда 8байт(поворот вдоль не нужен)
резерв 8 байт
Итого - 60байт
Х
все сразу передают
(30*60байт)*5000 + (30*166*60) = 8,86 Мб < трафик за сеанс
размер одного передоваемого пакета^ ^Uзверей ^размер получаемых пакетов
(238Мб/сек) / 8,86 = 26,86
1сек / 26,8 = 0.037
то есть насколько я понял пакет можно будет передовать с задержкой 37мс - 50мс
^размер пакета ^колличество отправленных+принятые
то есть за одну сек - 238 Мб
разберем такую ситуацию
Онлайн танки
Х
30 игроков в руме
размер одного пакета =
позиция 12байт
вращение 12байт(оптимально)
поворот турели 4байт
подьем пушки 4байт
позиция снаряда 12байт
поворот снаряда 8байт(поворот вдоль не нужен)
резерв 8 байт
Итого - 60байт
Х
все сразу передают
(30*60байт)*5000 + (30*166*60) = 8,86 Мб < трафик за сеанс
размер одного передоваемого пакета^ ^Uзверей ^размер получаемых пакетов
(238Мб/сек) / 8,86 = 26,86
1сек / 26,8 = 0.037
то есть насколько я понял пакет можно будет передовать с задержкой 37мс - 50мс
Исходя и этого я стал рыть что же лучше подойдет мне, везде советуют ипользовать UDP о нем то я сейчас и читаю на вики http://ru.wikipedia.org/wiki/UDP
Есть и еще 1 проблема, работая прежде в С# с бд mysql(а сервер будет именно использовать ее) не раз замечал что C# не очень то дружит с ней, всегда использовал mysql connector , и скорость я бы сказал не самая идеальная, или может я что то не так делал... Ну как вам сказать, для простого виндос форм приложения, скорость вполне нормальная, а для сервера, такая скорость записи в бд не пойдет,
Например: Делал простую выборку по базе(проверял существует ли такой emeil приходилось подождать секунду точно, а это ведь всего проверка, а вы представте сколько запросов к бд будет при работе сервера, и т.д)
Что хочется услышать от вас? мнение по этому поводу,а именно: Если бы у вас встала такая задача какой протокол вы бы выбрали ,почему? Как лучше будет работать с mysql. Стоит ли брать C# или же лучше изучать другой язык( я не имею не чего против C# и щитаю что на нем вполне можно реализовать данную задачу, единственное что сервер сможет работать только под Windows, если же его писать например на java(например все пиратские сервера знаменитой lineage 2 написанны на ней) то тогда можно бы было его запускать под пингвином, хотя это не столь принципиально.
Итак, какой же протокол выбрать? как наиболее эфективно передовать данные от клиента к серверу в mmo с наименьшей задержкой и наименьшим трафиком? Стоит ли рыть в сторону UDP? Ведь есть и TCP.
Было бы интересно выслушать ваше мнение по этому поводу)
Спасибо за внимание)
По поводу архитектуры Аллоды онлайн, дам ссылку, может кому интересно будет, кстате советую всем глянуть кто работает с java, человек расказывает о плюсах и минусах, и почему они выбрали именно ее.
http://rutracker.org/forum/viewtopic.php?t=2961984
От вас интересует все таки, брать java или C#?) и интересно как организован сервер lineage2, рытся в исходниках не какого желания нет, да и с java я не знаком, учить пока не берусь, вот пока теорией запасаюсь, если же все же решу писать на java то думаю первым делом ее изучу и начну смотреть архитиктуру lineage 2 , а пока интересует ваше мнение, что бы вы например изменили если бы вам предстояло писать сервер под клиент lineage 2 с нуля, что вам не нравится в существующем сервере. И еще один вопрос
Откуда собственно появился пиратский сервер на java. На сколько мне изве стно офицальные сервера писались на C++ ,хотя я могу ошибаться, дак вот что все пишут все свои пиратские сервера с нуля, или же есть какая то команда которая собрала сервер на java под клиент, и на основе их сборки вы все уже пилите свои?
Списибо за внимание!)

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