UoKit.com Форумы > Ultima Online : Dev > RunUO Server > Вопросы по RunUO
Страницы: 1, 2
EL-GReeN
Стало интересно а что если взять исходники, и постепенно перепиливать ее для другой игры, не ультимы, ведь уже много чего готового и хорошего сделано в ранке, А алгоритм, инструменты для работы с картой и прочее.

1) Какой максимальный онлайн она держит, и есть ли возможность увеличить за счет оптимизации(или С# совсем не для серверов?). Сколько ядер оптимально для стандартной ранки.

2) Оптимизирована ли сборка мусора, так как под нагрузкой сервер может сожрать все ресурсы и начать залипать. Требуется ли обязательный перезапуск по расписанию.

3) На сколько сложны и запутаны исходники для большой модификации, или проще и быстрее будет забирать необходимые куски в отдельный проект.

Или оно совсем не подходит и лучше взять что то другое?
Вверх
Juzzver
Есть наработки по клиентам с открытым исходным кодом на том же C#, можно брать и прорабатывать, совершенствовать на свой лад.

Максимальный онлайн скорее будет упираться в системные ресурсы, т.к. на сервере все выполняется в одном потоке. Оптимизации конечно помогут еще что-то выиграть, но это дело затратное.

Естественно работает сборщик мусора, но его работа будет зависеть напрямую от качества кода.

Исходники, лично по моему мнению, находятся вполне в хорошем состоянии, легко читаются, легко модифицируются. Любую задачу можно решить множеством способов, чем мне и нравится ранка.

Конечно если говорить о полной расширяемости и серьезных изменениях - в этом плане почти любой продукт будет ограничен. Я видел переписанные сборки ранки по принципам проектирования SOLID, они сложнее в понимании, но зато легко расширяемые, и такой код можно кусками вырывать, вставляя куда либо еще(если конечно в другом месте так же всё ровно реализовано). Но конечно и там еще есть что дорабатывать.

Я бы лучше всё таки смотрели в сторону Unity, можно взять готовый шаблон и дорабатывать его уже по своему усмотрению, зато на выходе получить свой, кросс-платформенный ,ни в чем неограниченный продукт.
Вверх
EL-GReeN
Цитата
Есть наработки по клиентам с открытым исходным кодом на том же C#, можно брать и прорабатывать, совершенствовать на свой лад.

Где посмотреть?
И вопрос скорее именно про сервер а не про клиент, юнити для клиента может и зайдет но не когда это просто хобби с одним кодером, слишком много времени сожрет, в том числе и с графонием там сложнее(учись сам моделить или покупай).

Цитата
Максимальный онлайн скорее будет упираться в системные ресурсы, т.к. на сервере все выполняется в одном потоке. Оптимизации конечно помогут еще что-то выиграть, но это дело затратное.

Вот чего в исходнике есть:
Код
            if( m_MultiProcessor || Is64Bit )
                Console.WriteLine( "Core: Optimizing for {0} {2}processor{1}", m_ProcessorCount, m_ProcessorCount == 1 ? "" : "s", Is64Bit ? "64-bit " : "" );

Вверх
Juzzver
Цитата
Где посмотреть?

https://github.com/ZaneDubya/UltimaXNA
Цитата
И вопрос скорее именно про сервер а не про клиент, юнити для клиента может и зайдет но не когда это просто хобби с одним кодером, слишком много времени сожрет, в том числе и с графонием там сложнее(учись сам моделить или покупай).

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

В любом случае, ранка хороший пример, если смотреть на какие то реализации. К примеру тот же поиск пути, обход преград и т.п. фишки - с нуля писать достаточно сложно, всякие волновые алгоритмы придется использовать, учитывать тематические нюансы и т.д. А так глянул в ранку, уже понял что к чему

Если под ранкой перевести уо на браузер - это будет бомба, но дело опять же крайне затратное).

Цитата
Вот чего в исходнике есть:

Ранка умеет работать с многопроцессорной архитектурой.
Вверх
Aimed
Это плохая идея. Я серьёзно.
UltimaXNA заброшен и имеет слишком много недоработок и багов.
Хочешь что-то делать, лучше бери Юнити.
Вверх
EL-GReeN
Даже не знаю где спросить, на сишарповых форумах не обитаю, попробую тут:
Делал один буржуй шаблон сервера на C# для одного движка, и все там было хорошо пока не стали тестить, проблема там вроде заключалась в том что он не смог нормально переводить нити в режим ожидания для уменьшения нагрузки на ЦП, на каждую нить сажался сокет(клиент).

Цитата
I've noticed that the server has some glaring CPU optimization issues (Server sits idle with just a TcpServerHandler running at 20% CPU, then +20% for every active TcpClientHandler, and +20% for any other active TcpServerHandler/UdpServerHandler objects)


Цитата
The current problem with this is that the threads are running constantly and using up CPU cycles regardless of whether they're doing any real work. In C++ this is fixed via conditional variables which basically says "Keep the thread alseep until this condition is met."


Похоже на то что он криво сделал, или это такая особенность сишарпа, и он плохо подходит под сервер?
Вверх
Juzzver
Язык тут не причем. Как по мне, управлять потоками на C# куда проще и безопаснее, чем на C++.
Но вообще, чем больше отводится потоков - тем конечно же больше начинает снижаться производительность. Но это если в разумных цифрах. Поскольку процессорные такты начинаются делится на все потоки, и начинается некий слоу моушен.
Вверх
StaticZ
Цитата(EL-GReeN @ 14.9.2016, 20:07)

Даже не знаю где спросить, на сишарповых форумах не обитаю, попробую тут:
Делал один буржуй шаблон сервера на C# для одного движка, и все там было хорошо пока не стали тестить, проблема там вроде заключалась в том что он не смог нормально переводить нити в режим ожидания для уменьшения нагрузки на ЦП, на каждую нить сажался сокет(клиент).

O_o Я что-то проспал наверное, а в .NET уже появился какой-то API по работе с нитями?
Вверх
Aimed
Скорее всего кривой шаблон у него.
Дай код этого буржуя. Через тот-же AutoResetEvent нормально треды в слип уходят и ничего лишнего не грузят. Наверное что-то не так они делали. Если б это было так, уже давно такой кипишь поднялся-бы...
На SO тоже частенько замечаю как создают топики с вопросами что у них много ЦПУ хавается, когда используется несколько потоков и обычно там нюбские ошибки, типа проверки очереди в while(true) и так далее.
Вверх
EL-GReeN
Цитата(Aimed @ 15.9.2016, 15:17)

Дай код этого буржуя.

https://github.com/FatalSleep/CSharp-Server-For-GMS
Вверх
Invision Power Board © 2001-2024 Invision Power Services, Inc.
Version for Pocket PC © 2006-2024, IPBest Studio.