Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> RunUO как база для сервера ММО?
EL-GReeN
сообщение 30.8.2016, 11:28
Сообщение #1


*****

Journeyman
Сообщений: 474
Регистрация: 18.7.2011
Группа: Пользователи
Наличность: 0
Из: Россия
Пользователь №: 13.815
Возраст: 32



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

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

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

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

Или оно совсем не подходит и лучше взять что то другое?


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Juzzver
сообщение 30.8.2016, 14:42
Сообщение #2


**********

Модератор RunUO
Сообщений: 3.425
Регистрация: 1.11.2008
Группа: Супермодераторы
Наличность: 22565
Из: Северная Корея
Пользователь №: 11.273



Есть наработки по клиентам с открытым исходным кодом на том же C#, можно брать и прорабатывать, совершенствовать на свой лад.

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

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

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

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

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


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
EL-GReeN
сообщение 30.8.2016, 16:15
Сообщение #3


*****

Journeyman
Сообщений: 474
Регистрация: 18.7.2011
Группа: Пользователи
Наличность: 0
Из: Россия
Пользователь №: 13.815
Возраст: 32



Цитата
Есть наработки по клиентам с открытым исходным кодом на том же C#, можно брать и прорабатывать, совершенствовать на свой лад.

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

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

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


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Juzzver
сообщение 30.8.2016, 21:03
Сообщение #4


**********

Модератор RunUO
Сообщений: 3.425
Регистрация: 1.11.2008
Группа: Супермодераторы
Наличность: 22565
Из: Северная Корея
Пользователь №: 11.273



Цитата
Где посмотреть?

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

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

В любом случае, ранка хороший пример, если смотреть на какие то реализации. К примеру тот же поиск пути, обход преград и т.п. фишки - с нуля писать достаточно сложно, всякие волновые алгоритмы придется использовать, учитывать тематические нюансы и т.д. А так глянул в ранку, уже понял что к чему (IMG:style_emoticons/default/smile.gif)

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

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

Ранка умеет работать с многопроцессорной архитектурой.


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Aimed
сообщение 30.8.2016, 21:12
Сообщение #5


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8846
Пользователь №: 15.607



Это плохая идея. Я серьёзно.
UltimaXNA заброшен и имеет слишком много недоработок и багов.
Хочешь что-то делать, лучше бери Юнити.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
EL-GReeN
сообщение 14.9.2016, 20:07
Сообщение #6


*****

Journeyman
Сообщений: 474
Регистрация: 18.7.2011
Группа: Пользователи
Наличность: 0
Из: Россия
Пользователь №: 13.815
Возраст: 32



Даже не знаю где спросить, на сишарповых форумах не обитаю, попробую тут:
Делал один буржуй шаблон сервера на 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."


Похоже на то что он криво сделал, или это такая особенность сишарпа, и он плохо подходит под сервер?


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Juzzver
сообщение 14.9.2016, 21:11
Сообщение #7


**********

Модератор RunUO
Сообщений: 3.425
Регистрация: 1.11.2008
Группа: Супермодераторы
Наличность: 22565
Из: Северная Корея
Пользователь №: 11.273



Язык тут не причем. Как по мне, управлять потоками на C# куда проще и безопаснее, чем на C++.
Но вообще, чем больше отводится потоков - тем конечно же больше начинает снижаться производительность. Но это если в разумных цифрах. Поскольку процессорные такты начинаются делится на все потоки, и начинается некий слоу моушен.


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
StaticZ
сообщение 15.9.2016, 12:04
Сообщение #8


*********

Разработчик проекта "Квинтэссенция"
Сообщений: 2.155
Регистрация: 15.6.2009
Группа: Пользователи
Наличность: 0
Из: РФ, Москва
Пользователь №: 11.948



Цитата(EL-GReeN @ 14.9.2016, 20:07) *

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

O_o Я что-то проспал наверное, а в .NET уже появился какой-то API по работе с нитями?


--------------------
RP сервер UO: Quintessence, а также ПО: EssenceUCS, EssenceUDK, CentrEd+, Fiddler+ и др.
Game isn't a dream, it is the reality, reality which is coming while we dream...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Aimed
сообщение 15.9.2016, 15:17
Сообщение #9


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8846
Пользователь №: 15.607



Скорее всего кривой шаблон у него.
Дай код этого буржуя. Через тот-же AutoResetEvent нормально треды в слип уходят и ничего лишнего не грузят. Наверное что-то не так они делали. Если б это было так, уже давно такой кипишь поднялся-бы...
На SO тоже частенько замечаю как создают топики с вопросами что у них много ЦПУ хавается, когда используется несколько потоков и обычно там нюбские ошибки, типа проверки очереди в while(true) и так далее.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
EL-GReeN
сообщение 15.9.2016, 16:53
Сообщение #10


*****

Journeyman
Сообщений: 474
Регистрация: 18.7.2011
Группа: Пользователи
Наличность: 0
Из: Россия
Пользователь №: 13.815
Возраст: 32



Цитата(Aimed @ 15.9.2016, 15:17) *

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

https://github.com/FatalSleep/CSharp-Server-For-GMS


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Aimed
сообщение 15.9.2016, 17:20
Сообщение #11


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8846
Пользователь №: 15.607



Цитата(EL-GReeN @ 15.9.2016, 15:53) *


Да... как я и говорил, нюбская ошибка с while(true). Там у него слип на 1 мс, а потом проверка на TcpListener.Pending() и это жрет его ЦПУ.

Вот метод с этой ошибкой(начиная со строки 83):
Код

        public async void TcpAccept() {
            // While the server is online accept incoming client connections.
            while( Status == true ) {
                // Attempt to process the code, if not successful, throw an exception and close the server.
                Thread.Sleep( 1 );

                try {
                    // If a pending client connection is found, accept the client connection.
                    if ( ServerHandle.Pending() == true ) {
                        // If the client connection is accepted, setup the new clent.
                        TcpClientSocket NewClient = new TcpClientSocket( BufferReadSize , BufferWriteSize , BufferAlignment , PacketHeader );
                        NewClient.ClientHandle = await ServerHandle.AcceptTcpClientAsync();
                        NewClient.ClientHandle.LingerState = new LingerOption( true , 0 );
                        NewClient.ClientHandle.NoDelay = true;
                        NewClient.DataStream = NewClient.ClientHandle.GetStream();

                        // Add the client to the server's client socket list.
                        ClientList.Add( NewClient.SocketId , NewClient );

                        // Start running the client and processing data for it, be it sending or receiving data.
                        ThreadPool.QueueUserWorkItem( myThread => ClientHandle( NewClient ) );
                    }
                } catch( Exception ) {
                    Status = false;
                }
            }

            TcpListenerClose();
        }

Вот на SO аналогичная проблема и вопрос и там-же есть обьяснение.
http://stackoverflow.com/questions/2235565...ding-connection

Просто нужно тред блочить, а не чекать каждую 1 мс и все.

у Майкрософта есть получше кусок кода для этого, через ManualResetEvent сделали.
https://msdn.microsoft.com/en-us/library/fx...(v=vs.110).aspx
Мейн тред полностью заблочен пока Socket.BeginAccept() не начался.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
StaticZ
сообщение 15.9.2016, 18:32
Сообщение #12


*********

Разработчик проекта "Квинтэссенция"
Сообщений: 2.155
Регистрация: 15.6.2009
Группа: Пользователи
Наличность: 0
Из: РФ, Москва
Пользователь №: 11.948



ЗЫ на будущее общепринятый перевод "Thread" это "поток", которые в общем случае состоят из "Fibers", что согласно общепринятому переводу, переводятся как раз как "нити". Конечно на путаницу перевода многие плются, т.к. в добавок к этому "Stream" тоже переводят как "поток", но так уж сложилось исторически и такой чудной перевод стал общепринятым...


--------------------
RP сервер UO: Quintessence, а также ПО: EssenceUCS, EssenceUDK, CentrEd+, Fiddler+ и др.
Game isn't a dream, it is the reality, reality which is coming while we dream...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Aimed
сообщение 15.9.2016, 18:38
Сообщение #13


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8846
Пользователь №: 15.607



Цитата(StaticZ @ 15.9.2016, 17:32) *

ЗЫ на будущее общепринятый перевод "Thread" это "поток", которые в общем случае состоят из "Fibers", что согласно общепринятому переводу, переводятся как раз как "нити". Конечно на путаницу перевода многие плются, т.к. в добавок к этому "Stream" тоже переводят как "поток", но так уж сложилось исторически и такой чудной перевод стал общепринятым...


Кто-нибудь ними вобще пользуется? (Fibers)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
StaticZ
сообщение 15.9.2016, 18:43
Сообщение #14


*********

Разработчик проекта "Квинтэссенция"
Сообщений: 2.155
Регистрация: 15.6.2009
Группа: Пользователи
Наличность: 0
Из: РФ, Москва
Пользователь №: 11.948



Цитата(Aimed @ 15.9.2016, 18:38) *

Кто-нибудь ними вобще пользуется? (Fibers)

Бывает, на самом деле штука хорошая в плане оптимизации т.к. не требует времени на переключение в отличии от потоков. Другое дело что с ними возни куда больше, т.к. если за переключение потоков отвечает ОС то за нити сам программист....


--------------------
RP сервер UO: Quintessence, а также ПО: EssenceUCS, EssenceUDK, CentrEd+, Fiddler+ и др.
Game isn't a dream, it is the reality, reality which is coming while we dream...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Aimed
сообщение 15.9.2016, 18:49
Сообщение #15


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8846
Пользователь №: 15.607



Цитата(StaticZ @ 15.9.2016, 17:43) *

Бывает, на самом деле штука хорошая в плане оптимизации т.к. не требует времени на переключение в отличии от потоков. Другое дело что с ними возни куда больше, т.к. если за переключение потоков отвечает ОС то за нити сам программист....


Багочувствительная чтука вобщем.
А ты их сам хоть раз использовал по делу( тоесть не в учебных/ознакомительных целях) ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
StaticZ
сообщение 15.9.2016, 20:57
Сообщение #16


*********

Разработчик проекта "Квинтэссенция"
Сообщений: 2.155
Регистрация: 15.6.2009
Группа: Пользователи
Наличность: 0
Из: РФ, Москва
Пользователь №: 11.948



Цитата(Aimed @ 15.9.2016, 18:49) *

Багочувствительная чтука вобщем.
А ты их сам хоть раз использовал по делу( тоесть не в учебных/ознакомительных целях) ?

не было потребности, это скорее к случаям когда нужна запределеьная производительность или в случае когда 100500 тредов, что в принципе актуально наверное лишь для серьезного сервера (при условии конечно что кластеризация не по карману). Хотя на самом деле не так уж там все и страшно и сложно, чутка побольше кода, а так оно все часть того же WinAPI, так что тут скорее причина просто в лени )


--------------------
RP сервер UO: Quintessence, а также ПО: EssenceUCS, EssenceUDK, CentrEd+, Fiddler+ и др.
Game isn't a dream, it is the reality, reality which is coming while we dream...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 28.3.2024, 17:14
Designed by Nickostyle