Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Игровой клиент (https://forum.zone-game.info/forumdisplay.php?f=54)
-   -   Пишу сервер с 0 на c# (https://forum.zone-game.info/showthread.php?t=40832)

krisadr 04.06.2016 19:12

Re: Пишу сервер с 0 на c#
 
Цитата:

Сообщение от Connie (Сообщение 413113)
Похоже, что кто-то сильно угорел по SAO и Login Horizon, но l2 его не отпускает при этом :D

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

Но мой совет - в таких делах всегда нужен не столько тот, кто умеет на java программировать, сколько тот, кто умеет творить чудеса со старым клиентом линейки.

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

Добавлено через 1 минуту
Цитата:

Сообщение от Zubastic (Сообщение 413121)
А третий раз будет иначе? Одному человеку нужно иметь железные яйца, чтобы пилить все это соло ибо в противном случае тотальный зашквар.

Я просто теперь, когда уж вкрай за*бет, иду гулять в парк или в бар с друзьями. Потом желание возвращается xDD

n3k0nation 04.06.2016 21:45

Re: Пишу сервер с 0 на c#
 
Цитата:

Сообщение от krisadr (Сообщение 413123)
Как видел в подписи у одного мембера зоны "то что написано в l2j это порнофильм с дешовыми порно актерами"(смысл такой)

Призыв меня удался:D

Цитата:

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

Лирика: как раз таки с проблемой 10к справляются с помощью селекторов, только, обычно, нескольких, которые работают параллельно, но уж никак не созданием по треду на каждого клиента. И работает селектор далеко не так, как представлено:)

В то время, когда это все писалось, еще не было 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.
В общем и грубо говоря: они предназначены для веб-серверов, но уж никак не для гейм лоад сети.

krisadr 04.06.2016 22:53

Re: Пишу сервер с 0 на c#
 
Цитата:

Сообщение от n3k0nation (Сообщение 413135)
Лирика: как раз таки с проблемой 10к справляются с помощью селекторов, только, обычно, нескольких, которые работают параллельно, но уж никак не созданием по треду на каждого клиента. И работает селектор далеко не так, как представлено:)
.

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

Из вики:
Свернуть ↑Развернуть ↓

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

Добавлено через 2 минуты
Цитата:

Сообщение от n3k0nation (Сообщение 413135)
Призыв меня удался:D


В то время, когда это все писалось, еще не было 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.
В общем и грубо говоря: они предназначены для веб-серверов, но уж никак не для гейм лоад сети.

То было одно время, сейчас другое, почему бы не использовать новые доступные технологии)

n3k0nation 05.06.2016 00:09

Re: Пишу сервер с 0 на c#
 
Цитата:

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

Из вики:
Свернуть ↑Развернуть ↓

Суждение по nginx:
Свернуть ↑Развернуть ↓

FaintSmile 05.06.2016 13:31

Re: Пишу сервер с 0 на c#
 
Цитата:

Сообщение от krisadr (Сообщение 413123)
а у фреймворка есть такая мощная вещь как асинхронные операции (оптимизированный пулл потоков) с помощью которого можно справится с 10000 соединениями...

Лично мне не приходилось лицезреть выше 2к онлайна на одном сервере с 2014 года. Такие извращения либо бессмысленны и беспощадны, либо чрезмерно оптимистичны kappa

krisadr 08.06.2016 05:37

Re: Пишу сервер с 0 на c#
 
Цитата:

Сообщение от Connie (Сообщение 413155)
Лично мне не приходилось лицезреть выше 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, а с релизной оптимизацией все будет летать еще быстрее)

FaintSmile 08.06.2016 15:16

Re: Пишу сервер с 0 на c#
 
Цитата:

Сообщение от krisadr (Сообщение 413281)
Ну я бы не назвал это прямо таки извращением.
Вот наконец то закончил с реализацией криптера-декриптера...
приведу примеры 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 мобов и квесты туда же.

krisadr 08.06.2016 19:05

Re: Пишу сервер с 0 на c#
 
Цитата:

Сообщение от Connie (Сообщение 413312)
Это круто, что у Вас получается делать то, что нравится.

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

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

не все сразу) тут нужно делать не спеша и постепенно... торопится мне пока что некуда. Я все таки считаю что сервер написать куда проще чем клиент, а про 3d анимацию, модели, текстуры я вообще молчу... а так хоть есть шанс написать что то свое и работающее так как ты считаешь нужным)) ибо колоссальная работа над клиентом сделана до тебя, к тому же пакетная чать тоже распилена до зубчика - бери не хочу.... по мне так это единственный возможный вариант одному сделать что то стоящие.
Честно говоря меня не сколько логика скиллов или АИ мобов пугает, сколько реализация геодаты, и поиска пути... в геодате я точно поплыву потому что там тупо байты, тут я не силен, что далеко ходить - для того чтобы понять как шифруется\дешифруется трафик и реализовать, у меня ушло часов 5 почти непрерывного шаманства... вроде все сделал как нужно и на тебе при дешифровке чексумма не сходилась... оказывается я с самого начала забыл про обратную последовательность байтов в трафике l2... пришлось переделывать. Вообщем пока что побегаем без геодаты и поиска пути... у меня уже дикие мысли возникают о ручной реализации геодаты и системы вейпоинтов xDD, а может мне просто нужно пойти поспать и завтра придумаю более оптимальный вариант.

iFailed 09.06.2016 01:52

Re: Пишу сервер с 0 на c#
 
Где 2009 , где 2016. Линейка умирает не по дням а по часам. Нет той аудитории, которая была даже в 2013.

JavaMan 09.06.2016 01:53

Re: Пишу сервер с 0 на c#
 
krisadr, https://github.com/Elfocrash/L2dotNET - тут ребята тоже пишут сервер л2 с нуля на шарпе, может будет интересно глянуть.
PS тему не читал, но осуждаю за шарп, а за предоставление результата бенчмарков без кода самих бенчмарков вообще тихо ненавижу.


Текущее время: 12:09. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot