Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Пишу сервер с 0 на c#
#11
Connie Написал:Похоже, что кто-то сильно угорел по SAO и Login Horizon, но l2 его не отпускает при этом Big Grin

По теме же могу сказать, что делать сервер с нуля - нулем всё и поделится. Лучше взять что-то работающее и уже менять на своё усмотрение. Там и людей можно найти в команду. Мне бы, например, было бы интересно поучаствовать в чем-то таком, даже за бесплатно, ради хобби. Так что может и найдешь людей.

Но мой совет - в таких делах всегда нужен не столько тот, кто умеет на java программировать, сколько тот, кто умеет творить чудеса со старым клиентом линейки.
не всегда что то "работающее" работающим является... взять того же старичка l2jserver - проотца всех серверов l2j. Как видел в подписи у одного мембера зоны "то что написано в l2j это порнофильм с дешовыми порно актерами"(смысл такой) - я полностью в этом с ним согласен. Нужно понимать что тогда когда писался l2j - об организации глубокой и продуманной структуре они врятли думали - тем более разработка велась опять же энтузиастами. У кого то был хороших стиль программирования и продумывания алгоритмов, у кого-то не очень. Я не в коем случае их не осуждаю да и кто я такой чтобы это делать, они выполнили свою задачу в полной мере....
Но сетевой движок в один поток на селекторе и nio... давайте почитаем про проблемму 10к соединений и какие подходы с ним справляются... да и вообще сервер в один поток - это перебор сокетов в цикле что на мой все таки взгляд является не правильным подходом... да такой сервер может выдержать большое кол-во подключений, но время отклика увеличивается причем на много...
а у фреймворка есть такая мощная вещь как асинхронные операции (оптимизированный пулл потоков) с помощью которого можно справится с 10000 соединениями...

Добавлено через 1 минуту
Zubastic Написал:А третий раз будет иначе? Одному человеку нужно иметь железные яйца, чтобы пилить все это соло ибо в противном случае тотальный зашквар.

Я просто теперь, когда уж вкрай за*бет, иду гулять в парк или в бар с друзьями. Потом желание возвращается xDD
Ответ
#12
krisadr;413123 Написал:Как видел в подписи у одного мембера зоны "то что написано в l2j это порнофильм с дешовыми порно актерами"(смысл такой)
Призыв меня удалсяBig Grin

krisadr;413123 Написал:Но сетевой движок в один поток на селекторе и nio... давайте почитаем про проблемму 10к соединений и какие подходы с ним справляются... да и вообще сервер в один поток - это перебор сокетов в цикле что на мой все таки взгляд является не правильным подходом... да такой сервер может выдержать большое кол-во подключений, но время отклика увеличивается причем на много...
Лирика: как раз таки с проблемой 10к справляются с помощью селекторов, только, обычно, нескольких, которые работают параллельно, но уж никак не созданием по треду на каждого клиента. И работает селектор далеко не так, как представленоSmile

В то время, когда это все писалось, еще не было NIO2.0 (async network), был выбор: писать на cpp для каждой платформы свою библиотеку (poll/epoll для линуксов и WSA для вин; про бздю вообще молчу), которую потом еще придется поддерживать, или же писать все на первом NIO.
До выхода J7 (в котором появился NIO2.0), особого смысла от нескольких RW Selector-воркеров не было, т.к. нативный поток полинга оставался одним. С вводом NIO2.0 JVM научилась их масштабировать (даже если не использовать async), поэтому, именно, после релиза J7, имело смысл что-то и как-то делать, но не раньше.

krisadr;413123 Написал:а у фреймворка есть такая мощная вещь как асинхронные операции (оптимизированный пулл потоков) с помощью которого можно справится с 10000 соединениями...
Конечно же, до выхода J7 существовал Netty, Grizzly и другие, но их использование... Хм... Об одном только Netty я могу много рассказать, особенно, про замечательный баг 100% CPU Use, который у них лежит на багтрекере уже лет десять, в состоянии Open.
В общем и грубо говоря: они предназначены для веб-серверов, но уж никак не для гейм лоад сети.
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Ответ
#13
n3k0nation Написал:Лирика: как раз таки с проблемой 10к справляются с помощью селекторов, только, обычно, нескольких, которые работают параллельно, но уж никак не созданием по треду на каждого клиента. И работает селектор далеко не так, как представленоSmile
.

ну мне в принципе не важно как он там на самом деле работает... смысл такой что в l2j один поток обрабатывает все подключения... без всякого распараллеливания.

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

Добавлено через 2 минуты
n3k0nation Написал:Призыв меня удалсяBig Grin


В то время, когда это все писалось, еще не было NIO2.0 (async network), был выбор: писать на cpp для каждой платформы свою библиотеку (poll/epoll для линуксов и WSA для вин; про бздю вообще молчу), которую потом еще придется поддерживать, или же писать все на первом NIO.
До выхода J7 (в котором появился NIO2.0), особого смысла от нескольких RW Selector-воркеров не было, т.к. нативный поток полинга оставался одним. С вводом NIO2.0 JVM научилась их масштабировать (даже если не использовать async), поэтому, именно, после релиза J7, имело смысл что-то и как-то делать, но не раньше.


Конечно же, до выхода J7 существовал Netty, Grizzly и другие, но их использование... Хм... Об одном только Netty я могу много рассказать, особенно, про замечательный баг 100% CPU Use, который у них лежит на багтрекере уже лет десять, в состоянии Open.
В общем и грубо говоря: они предназначены для веб-серверов, но уж никак не для гейм лоад сети.

То было одно время, сейчас другое, почему бы не использовать новые доступные технологии)
Ответ
#14
krisadr;413138 Написал:ну мне в принципе не важно как он там на самом деле работает... смысл такой что в l2j один поток обрабатывает все подключения... без всякого распараллеливания.

Из вики
Суждение по nginx
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Ответ
#15
krisadr Написал:а у фреймворка есть такая мощная вещь как асинхронные операции (оптимизированный пулл потоков) с помощью которого можно справится с 10000 соединениями...

Лично мне не приходилось лицезреть выше 2к онлайна на одном сервере с 2014 года. Такие извращения либо бессмысленны и беспощадны, либо чрезмерно оптимистичны kappa
Ответ
#16
Connie Написал:Лично мне не приходилось лицезреть выше 2к онлайна на одном сервере с 2014 года. Такие извращения либо бессмысленны и беспощадны, либо чрезмерно оптимистичны kappa
Ну я бы не назвал это прямо таки извращением.
Вот наконец то закончил с реализацией криптера-декриптера...
приведу примеры Stopwatch. Так вот в сервере на шарпе с асинхронным чтением\записью с момента получение пакета, до момента реакции на него проходит среднем 300к наносек (дешифровка пакетов включена в тест)
(sw.ElapsedTicks * ((1000L * 1000L * 1000L) / Stopwatch.Frequency), если не считать первый запуск пакет ридера(некешируемый). В то время как на selector в java тратилось порядка 1000к наносек (по крайней мере на моем железе.)
Получается чисто теоретически, чтобы одновременно обработать 5к подключений на у c# займет 1,5 сек.
у selector'a на всех l2j - 5 сек. Нельзя конечно слепо верить данным тестом, ведь все познается только в реальных условиях, но все же это придает мне оптимизма к развитию проекта на шарпе :redlol:
да забыл добавить тесты проводились на DEBUG, а с релизной оптимизацией все будет летать еще быстрее)
Ответ
#17
krisadr Написал:Ну я бы не назвал это прямо таки извращением.
Вот наконец то закончил с реализацией криптера-декриптера...
приведу примеры Stopwatch. Так вот в сервере на шарпе с асинхронным чтением\записью с момента получение пакета, до момента реакции на него проходит среднем 300к наносек (дешифровка пакетов включена в тест)
(sw.ElapsedTicks * ((1000L * 1000L * 1000L) / Stopwatch.Frequency), если не считать первый запуск пакет ридера(некешируемый). В то время как на selector в java тратилось порядка 1000к наносек (по крайней мере на моем железе.)
Получается чисто теоретически, чтобы одновременно обработать 5к подключений на у c# займет 1,5 сек.
у selector'a на всех l2j - 5 сек. Нельзя конечно слепо верить данным тестом, ведь все познается только в реальных условиях, но все же это придает мне оптимизма к развитию проекта на шарпе :redlol:
да забыл добавить тесты проводились на DEBUG, а с релизной оптимизацией все будет летать еще быстрее)
Это круто, что у Вас получается делать то, что нравится.

Такие разговоры навевают на меня воспоминания о том, как кое-кто делал L2 на UE3.

Добавлю немного пессимизма - подумайте о том, что Вам нужно будет написать не только ядро сервера, но и все эффекты скиллов, AI мобов и квесты туда же.
Ответ
#18
Connie Написал:Это круто, что у Вас получается делать то, что нравится.

Такие разговоры навевают на меня воспоминания о том, как кое-кто делал L2 на UE3.

Добавлю немного пессимизма - подумайте о том, что Вам нужно будет написать не только ядро сервера, но и все эффекты скиллов, AI мобов и квесты туда же.

не все сразу) тут нужно делать не спеша и постепенно... торопится мне пока что некуда. Я все таки считаю что сервер написать куда проще чем клиент, а про 3d анимацию, модели, текстуры я вообще молчу... а так хоть есть шанс написать что то свое и работающее так как ты считаешь нужным)) ибо колоссальная работа над клиентом сделана до тебя, к тому же пакетная чать тоже распилена до зубчика - бери не хочу.... по мне так это единственный возможный вариант одному сделать что то стоящие.
Честно говоря меня не сколько логика скиллов или АИ мобов пугает, сколько реализация геодаты, и поиска пути... в геодате я точно поплыву потому что там тупо байты, тут я не силен, что далеко ходить - для того чтобы понять как шифруется\дешифруется трафик и реализовать, у меня ушло часов 5 почти непрерывного шаманства... вроде все сделал как нужно и на тебе при дешифровке чексумма не сходилась... оказывается я с самого начала забыл про обратную последовательность байтов в трафике l2... пришлось переделывать. Вообщем пока что побегаем без геодаты и поиска пути... у меня уже дикие мысли возникают о ручной реализации геодаты и системы вейпоинтов xDD, а может мне просто нужно пойти поспать и завтра придумаю более оптимальный вариант.
Ответ
#19
Где 2009 , где 2016. Линейка умирает не по дням а по часам. Нет той аудитории, которая была даже в 2013.
Ответ
#20
krisadr, https://github.com/Elfocrash/L2dotNET - тут ребята тоже пишут сервер л2 с нуля на шарпе, может будет интересно глянуть.
PS тему не читал, но осуждаю за шарп, а за предоставление результата бенчмарков без кода самих бенчмарков вообще тихо ненавижу.
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Сервер IT(Lucera, лоу-рейт) c дополнениями. isysyura 0 1,392 03-15-2019, 01:25 PM
Последний пост: isysyura
  Клиент С4, настройка на сервер kotelok 1 1,591 01-31-2017, 09:41 AM
Последний пост: kotelok
  Куплю сервер. konanir 12 2,637 08-09-2016, 08:03 PM
Последний пост: Hack
  Не заходит на сервер Kassidy 2 1,329 08-09-2016, 10:48 AM
Последний пост: Rork
  Сервер установлен, критическая ошибка MalPorro 5 1,284 07-14-2014, 12:46 PM
Последний пост: MalPorro
  Клиент или Сервер? Teams 3 2,440 11-05-2013, 05:19 PM
Последний пост: Sisi
  Клиент не пускает на сервер... Evgeny2013 7 3,289 04-03-2013, 09:26 PM
Последний пост: Evgeny2013
  Редактирование описаний, копирайтов при заходе на сервер, клиент zasov 25 29,038 03-29-2013, 10:16 AM
Последний пост: Nasdomlan
  Не могу зайти на сервер KpoIIIuK 12 4,366 03-01-2013, 04:40 PM
Последний пост: DoGGeD'®
  Как правильно настроить сервер под no-ip Elemberg 0 1,399 11-06-2012, 09:47 PM
Последний пост: Elemberg

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)