Lineage2TS - HF сервер написанный на Typescript

MrThirtyOddSix

Пляшущий с бубном
Участник
Сообщения
153
Розыгрыши
0
Решения
1
Репутация
36
Реакции
82
Баллы
210
Хроники
  1. Chaotic Throne: High Five
Предлагаю свой проект сервера Lineage 2 на Typescript для клиента High Five.

Ссылка репозитория с кодом :

Можно установить сервер через докер :

Bash:
docker pull lineage2ts/server:latest
docker run -p 7777:7777 -p 2106:2106 lineage2ts/server:latest

Обновления кода обычно идут каждую неделю, как и обновления по докеру.

Технологии сервера. Сам проект был изначально построен по структуре L2J. Но логика, да и сама архитектура сервера косвенно отличается от Явы так как используется Nodejs. Есть рабочая гео-дата, взятая от L2J и улучшенная по структуре и размеру (около 35% меньше по объему, и разы быстрее по доступу). Данные датапака упакованы в базу данных SQLite, что опять-таки в разы быстрее по доступу чем XML от Явы (загрузка всего сервера около пяти секунд). Главная база данных использует SQLite. Конфиг файлы частично совпадают с L2J, но много дополнительных настроек. Датапак использует частично данные от L2J, но много данных было взято напрямую с L2OFF HF (по ровному счету остались скиллы и нпц от L2J).

В проект входят также вспомогательные части:
- тестирование серверов Lineage 2 с использованием cucumberjs
- прокси для серверов Lineage 2 (можно например поставить прокси на другом сервере, и через него играть на любых сервераx)

Беру помощь как в тестировании, так и кода для улучшения сервера.

English version.
Lineage2TS is server written in Typescript targeting High Five client.
Code repository is located here :

Following instructions can be used to get docker image of server and run it as container:
Bash:
docker pull lineage2ts/server:latest
docker run -p 7777:7777 -p 2106:2106 lineage2ts/server:latest

All contributions are welcome.
 

Спасибо
 
Удачи! Но тот же acis на ssd диске с гео загружается около 6 секунд)
 
Данные датапака упакованы в базу данных SQLite, что опять-таки в разы быстрее по доступу чем XML от Явы (загрузка всего сервера около пяти секунд).
Очень всё очень спорно.
Успехов.

Что-то мне подсказывает, что ты скоро откажешься от SQLite.
Лично рекомендую, перед тем как ты не начал получать попабольные проблемы, удалить SQLite и заменить на MySQL либо какую-то другую норм бд, и датапак хранить как в джава или json тут уже как тебе легче парсить
 
Очень всё очень спорно.
Успехов.

Что-то мне подсказывает, что ты скоро откажешься от SQLite.
Лично рекомендую, перед тем как ты не начал получать попабольные проблемы, удалить SQLite и заменить на MySQL либо какую-то другую норм бд, и датапак хранить как в джава или json тут уже как тебе легче парсить

а в чем конкретно проблемы возникнут?
 
Очень всё очень спорно.
Успехов.

Что-то мне подсказывает, что ты скоро откажешься от SQLite.
Лично рекомендую, перед тем как ты не начал получать попабольные проблемы, удалить SQLite и заменить на MySQL либо какую-то другую норм бд, и датапак хранить как в джава или json тут уже как тебе легче парсить
Зачем же отказываться? Это уже очень проверенный вариант. Он буквально везде используется. Ну и SQLite намного быстрее чем сам MySQL. Единственное что такая технология не может делать так это поддержка множественных пользователей по сети.

Не забывайте что разработки на Яве во первых не берут фокус на быстродействие как факт (разработчики просто считают что Ява сама будет оптимизировать, сказки...), что просто ведет к выбору очень старых технологий, когда можно бы и выбрать что-то получше.
 
К примеру с параллельными записями, что ещё больше ухудшает работу с транзакциями. Нет типизации. Медленный.
Все что вы описали не соответсвует правдe. Почитайте современные технологии и как они работают.
 
Зачем же отказываться? Это уже очень проверенный вариант. Он буквально везде используется. Ну и SQLite намного быстрее чем сам MySQL. Единственное что такая технология не может делать так это поддержка множественных пользователей по сети.

Не забывайте что разработки на Яве во первых не берут фокус на быстродействие как факт (разработчики просто считают что Ява сама будет оптимизировать, сказки...), что просто ведет к выбору очень старых технологий, когда можно бы и выбрать что-то получше.
При паре десятков пользователей IO вашего диска скажет привет. Я не говорю уже о database-wide lock при записи, что даст вам автоматически 1(один) поток на запись в базу. SQLite хорош для статики, для динамики использовать его точно не стоит.
 
При паре десятков пользователей IO вашего диска скажет привет. Я не говорю уже о database-wide lock при записи, что даст вам автоматически 1(один) поток на запись в базу. SQLite хорош для статики, для динамики использовать его точно не стоит.
Молодец. И зачем мне десятки пользователей? У меня сервер один как пользователь. Если надо много пользователей можно разбить базу данных на части чтобы таблица была в каждом файле. Но и до этого нужно проверить как все будет работать.

Я понимаю что люди видят SQLite и хотят использовать его как Mysql/Posgresql . Надо ведь технологии понимать и использовать правильно.
 
Молодец. И зачем мне десятки пользователей? У меня сервер один как пользователь. Если надо много пользователей можно разбить базу данных на части чтобы таблица была в каждом файле. Но и до этого нужно проверить как все будет работать.
Окей. У тебя, допустим, вдруг, на сервере играет 400 человек. Наступает гиппотетическое автосохранение игроков онлайн - база лочится на все его время сохранения и не прочитать ни записать ты ничего не сможешь с database locked. Каждой задаче - свой инструмент, SQLite просто-напросто изначально не подходит для этой задачи. Если ты этого не понимаешь, то, как сказал Logan22 , очень скоро поймешь.
 
Окей. У тебя, допустим, вдруг, на сервере играет 400 человек. Наступает гиппотетическое автосохранение игроков онлайн - база лочится на все его время сохранения и не прочитать ни записать ты ничего не сможешь с database locked. Каждой задаче - свой инструмент, SQLite просто-напросто изначально не подходит для этой задачи. Если ты этого не понимаешь, то, как сказал Logan22 , очень скоро поймешь.
Ну и зачем вы это мне все написали? Вы считаете что нужна база данных Mysql. Можно использовать ее. Но как я и сказал SQL будет быстрее. Почему?

1. У нас один сервер, один пользователь базы данных. Даже если надо много пользователей можно добавить WAL. То что вы описали про lock, не случиться с одним пользователем. Но даже если у вас много пользователей нужo понимать что если один пользователь пишет а другие читают, тоже ничего не случиться.
2. SQLite как я и сказал раньше используется везде. Он буквально во всем. У вас есть планшетный телефон? Android или iPhone? Да и в каждом браузере найдется по крайнем мере пару базы данных на SQLite. И не для статичных данных.
3. Не надо оскорблять. Я понимаю из опыта использования SQLite. То что вы написали, это просто бред. И я думаю что это чисто из-за не понимания как L2 сервер использует базы данных (даже на Яве!), ну и правила использования SQLite на сервере.
4. Оптимизации. Если будут проблемы с записью есть решения как во первых организовать запись данных что-бы небыло конфликтов (вне SQL), ну а потом уже конкретно решать.

Я понимаю что есть знатоки со своими советами. Я не против что вы сами можете мне напомнить что я ваших советов не слушал, и вы теперь будете более уважаемы. Но, хочу напомнить что я уже более двадцати год занимаюсь программированием (от ассемблера на ZX-80 до C++/Java, ну и теперь фаворит Typescript).
 
Да вообще не вопрос, удачи в разработке.
 
Окей. У тебя, допустим, вдруг, на сервере играет 400 человек. Наступает гиппотетическое автосохранение игроков онлайн - база лочится на все его время сохранения и не прочитать ни записать ты ничего не сможешь с database locked. Каждой задаче - свой инструмент, SQLite просто-напросто изначально не подходит для этой задачи. Если ты этого не понимаешь, то, как сказал Logan22 , очень скоро поймешь.
он похоже свидетель андройдов.
 
Окей. У тебя, допустим, вдруг, на сервере играет 400 человек. Наступает гиппотетическое автосохранение игроков онлайн - база лочится на все его время сохранения и не прочитать ни записать ты ничего не сможешь с database locked. Каждой задаче - свой инструмент, SQLite просто-напросто изначально не подходит для этой задачи. Если ты этого не понимаешь, то, как сказал Logan22 , очень скоро поймешь.

а что за автосохранение пользователей? в случае срочного рестарта? или когда так происходит? И можно ли пустить поток их сохранения через одного пользователя - геймсервера? можно ли красиво обойти недостатки этого сикьюлайта?
 
3. Не надо оскорблять. Я понимаю из опыта использования SQLite. То что вы написали, это просто бред. И я думаю что это чисто из-за не понимания как L2 сервер использует базы данных (даже на Яве!), ну и правила использования SQLite на сервере.


Я понимаю что есть знатоки со своими советами. Я не против что вы сами можете мне напомнить что я ваших советов не слушал, и вы теперь будете более уважаемы. Но, хочу напомнить что я уже более двадцати год занимаюсь программированием (от ассемблера на ZX-80 до C++/Java, ну и теперь фаворит Typescript).

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