Сообщений: 9
Тем: 1
Зарегистрирован: Dec 2012
Репутация:
0
Собственно так как на этом форуме собирается масса людей работающих с серверами а именно серверами lineage 2 java. Интересует вопрос организации архитиктуры сервера, каким образом там все работает, какой протакол используется.
Приведу мой пост на другом форуме
Пост
Всем привет,позвольте мне потратить пару минут вашего драгоценного времени и рассказать о моей возникшей проблеме
собственно делаю игру и пришел к решению писать свой сервер для 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мс
Тоесть основные подводные камни кроются в пакетах, передачи и скорости.
Исходя и этого я стал рыть что же лучше подойдет мне, везде советуют ипользовать 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 под клиент, и на основе их сборки вы все уже пилите свои?
Списибо за внимание!)
Сообщений: 2,455
Тем: 53
Зарегистрирован: Apr 2010
Репутация:
19,728
Хоу-хоу, всех с наступающим
Тема слишком обширна и ее не описать в одном посте, на данный момент написаны и пишутся книги по таковой теме
Цитата:От вас интересует все таки, брать java или C#?)
Берите, то что лучше знаете и где ваш мадскиллз будет вытягивать все.
Цитата:Откуда собственно появился пиратский сервер на java. На сколько мне известно офицальные сервера писались на C++ ,хотя я могу ошибаться, дак вот что все пишут все свои пиратские сервера с нуля, или же есть какая то команда которая собрала сервер на java под клиент, и на основе их сборки вы все уже пилите свои?
В наше время нет героев. Естественно все основано на одном ядре и все ошибки этого ядра переходят из команды в команду и ядро это l2j-server. Так же существует существенно переделанный форк l2j-server в виде l2j-fortress, продолжение которого вылилось в asterios (l2p/phoenix) и в сервак некоторых людей с этого форума (извиняюсь, забыл название сервера ). Плюс пару лет назад существовали закрытые проекты по написанию эмулятора с нуля, но похоже они так и остались в тине дна морского.
Цитата:пока интересует ваше мнение, что бы вы например изменили если бы вам предстояло писать сервер под клиент lineage 2 с нуля, что вам не нравится в существующем сервере.
Это не раз уже обсуждалось на форуме и не только этом.
Создание движка сервера (L2)
Cashed true system
L2Dev (Blakkky)
Balancer l2f forum
Про остальное напишу чуть позже, ибо уже полгода нахожусь не в той ситуации, чтобы много писать
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Сообщений: 9
Тем: 1
Зарегистрирован: Dec 2012
Репутация:
0
12-23-2012, 10:15 AM
(Сообщение последний раз редактировалось: 12-23-2012, 10:27 AM ldgames.)
Большое спасибо за ответ, думаю скачать l2jserver покапать код, скажите а есть ли где то исходники клиента?... l2jserver бесплатен, и я его без проблем нашел, интересно все же посмотреть что в клиенте, как он передает данные, как их принимает сервер и обрабатывает, ведь вы же как то работаете, ведь как то же создали сервер l2jserver, разве можно создать сервер без исходников клиента, когда не понятно что в какой момент отправляется и т.д.. Вот в чем вопрос))))
Добавлено через 5 минут
А, да еще, мне интересно как организованна связь между login server и game server.
То есть покопав сервера lineage 2 я обнаружил что для авторизации регистрации и т.д, служит login server который ставится например на отдельный физический сервер, и game server обрабатывающий всю игровую физику и т.д ставится на другой физ сервер(хотя наверное можно и на одном физ сервере..Да определенно можно!) Интересует как между ними оргинизованна связь, логин сервер при удачном конекте передает ключ в game сервер?... Пока я себе это предстовляю так, хотя тоже нужно качать да смотреть) может кто хотяб носом ткнёт на реализацию этого в l2jserver .
И еще одна вещь, некоторые команды разработчиков lineage 2 серверов, используют отдельны сервера для чата, или я путаю с aion, но где то такю фишку я точно видел тоесть : Login server, Game server, Chat server на сколько выгодно в плане производительности.
И еще одно, по какому же все таки протоколу в lineage2 идет обмен данными, UDP?)
p/s все вопросы впринципе кроются в исходниках, но ведь вам работающим людям с этими исходниками куда проще написать мне эти мелочи, или ткнуть носом в конкретный участок кода, чем я буду лопатить неизвестный мне код и искать что то для себя полезное, хотя я и начинаю уже его смотреть)
Да кстате, если знаете какую нибуть литературу по поводу строения, архитектуры mmo сервера, буду рад))) Без разницы на каком языке, что русский что английский, язык программирования тоже не важен, интересует только сама архитектура) как это все продуманно и т.д.. Сам как уже говорил пока нарыл только архитектуру Алоды онлайн
Сообщений: 5,863
Тем: 105
Зарегистрирован: Sep 2010
Репутация:
13,014
ldgames, может имеете ввиду petition server?
L2j:
login server
game server
L2 pts:
login server (или его заменитель, привет хинту)
l2server (аналог game server l2j, но урезанный ввиду наличия других сервисов)
petition server (сервер игровых петиций)
cached (прослойка между сервером и базой данных)
l2npc (мобы, просто мобы)
premium server (мистический сервис премиума)
l2comm (коммьюнити)
l2logD (система логгирования)
Сообщений: 9
Тем: 1
Зарегистрирован: Dec 2012
Репутация:
0
12-23-2012, 11:15 AM
(Сообщение последний раз редактировалось: 12-23-2012, 12:05 PM ldgames.)
Zubastic Написал:ldgames, может имеете ввиду petition server?
L2j:
login server
game server
L2 pts:
login server (или его заменитель, привет хинту)
l2server (аналог game server l2j, но урезанный ввиду наличия других сервисов)
petition server (сервер игровых петиций)
cached (прослойка между сервером и базой данных)
l2npc (мобы, просто мобы)
premium server (мистический сервис премиума)
l2comm (коммьюнити)
l2logD (система логгирования)
Да я имел что то в этом роде) Спасибо , скажите где можно поподробнее глянуть cached . Как идет работа с данными, например не всегда ведь идет запись в бд не важных данных: Например координаты при перемещении(иначе бы база сдохла) а хранятся в памяти и скажем раз в 5 минут летят в базу, а допустим при обмене вещами уже данные летят в базу сразу, где на примере l2jserver можно покапать это, ито там так много всего, и так мало полезного пока нашел в исходниках...
Добавлено через 50 минут
Не по теме
Кстате, тут пока лазил по всяким командам заметил одну интересную особенность, все без исключения используют SVN и чем он вам так нравится... Уже 2 год пользуюсь Git отличная система, много преимуществ над svn в плане удобного ведения веток и т.д . Многоветвление да и вообще) гляньте кому интересно) на пингвинно подобных ставится в два счета) а работать просто сказка))) С Svn тоже работал) но все же выбрал для себя git))
Сообщений: 2,036
Тем: 37
Зарегистрирован: Jun 2011
Репутация:
10,597
ldgames Написал:
Не по теме
Кстате, тут пока лазил по всяким командам заметил одну интересную особенность, все без исключения используют SVN и чем он вам так нравится... Уже 2 год пользуюсь Git отличная система, много преимуществ над svn в плане удобного ведения веток и т.д . Многоветвление да и вообще) гляньте кому интересно) на пингвинно подобных ставится в два счета) а работать просто сказка))) С Svn тоже работал) но все же выбрал для себя git))
Когда-то наша команда начинала работать на Git, но потом перешли на SVN. Основная причина - полнейшее нежелание пользователей читать мануалы и вникать как работает Git. Пользователи на форуме постоянно создавали тонны тем аля "ПАМАГИТЕ НИМАГУ СКОЧАТЬ ИСХОДНИКИ!!11".
Сообщений: 1,912
Тем: 56
Зарегистрирован: Jan 2009
Репутация:
12,921
Dеmon Написал:Когда-то наша команда начинала работать на Git, но потом перешли на SVN. Основная причина - полнейшее нежелание людей читать мануалы и вникать как работает Git. На форуме постоянно создавали тонны тем аля "ПАМАГИТЕ НИМАГУ СКОЧАТЬ ИСХОДНИКИ!!11".
:redlol: руки-крюки. что можно сказать ищо
Сообщений: 2,036
Тем: 37
Зарегистрирован: Jun 2011
Репутация:
10,597
VISTALL Написал::redlol: руки-крюки. что можно сказать ищо
Да больше ничего и не скажешь...
Говоря о Git, имхо, намного лучше, чем SVN.
Сообщений: 9
Тем: 1
Зарегистрирован: Dec 2012
Репутация:
0
Dеmon Написал:Да больше ничего и не скажешь...
Говоря о Git, имхо, намного лучше, чем SVN.
Это да))) Про то что не могут установить полностью согласен, тоже встречался с тем что пользователям лень прочитать мануал и установить git, под винду. Я уж и расписывал с криншотами) даже пример как пользоваться Turtoise Git приводил) один фиг темы плодили))))) В итоге забил на них) Сказал мануалы есть) читаейте ) Им все таки надо а не мне) а на svn не переберусь после git'a точно)))
И все таки вернувшись к теме, появилась следующая идейка: Пользователь(клиент) при конекте создает канал, передает сообщение серверу, по UDP протаколу на так сказать 'Прихожую', та в свою очередь подписывает клиента на сообщения и выделяет ему новый поток, И дальше клиент получает координаты других обьектов в зоне видимости и т.д .
Но ведь дело в том что приедтся все по 10 раз проверять, ведь протакол UDP не гарантирует даставку, а утеря данных неприемлима в моем случае...
Как эта структура реализованна в lineage 2?)
Сообщений: 5,863
Тем: 105
Зарегистрирован: Sep 2010
Репутация:
13,014
ldgames Написал:Да я имел что то в этом роде) Спасибо , скажите где можно поподробнее глянуть cached . Как идет работа с данными, например не всегда ведь идет запись в бд не важных данных: Например координаты при перемещении(иначе бы база сдохла) а хранятся в памяти и скажем раз в 5 минут летят в базу, а допустим при обмене вещами уже данные летят в базу сразу, где на примере l2jserver можно покапать это, ито там так много всего, и так мало полезного пока нашел в исходниках... Темку про кешед (выше ссылка) почитайте.
|