Сообщений: 832
Тем: 125
Зарегистрирован: Jan 2009
Репутация:
404
06-04-2016, 07:12 PM
(Сообщение последний раз редактировалось: 06-04-2016, 07:14 PM krisadr.)
Connie Написал:Похоже, что кто-то сильно угорел по SAO и Login Horizon, но l2 его не отпускает при этом
По теме же могу сказать, что делать сервер с нуля - нулем всё и поделится. Лучше взять что-то работающее и уже менять на своё усмотрение. Там и людей можно найти в команду. Мне бы, например, было бы интересно поучаствовать в чем-то таком, даже за бесплатно, ради хобби. Так что может и найдешь людей.
Но мой совет - в таких делах всегда нужен не столько тот, кто умеет на java программировать, сколько тот, кто умеет творить чудеса со старым клиентом линейки. не всегда что то "работающее" работающим является... взять того же старичка l2jserver - проотца всех серверов l2j. Как видел в подписи у одного мембера зоны "то что написано в l2j это порнофильм с дешовыми порно актерами"(смысл такой) - я полностью в этом с ним согласен. Нужно понимать что тогда когда писался l2j - об организации глубокой и продуманной структуре они врятли думали - тем более разработка велась опять же энтузиастами. У кого то был хороших стиль программирования и продумывания алгоритмов, у кого-то не очень. Я не в коем случае их не осуждаю да и кто я такой чтобы это делать, они выполнили свою задачу в полной мере....
Но сетевой движок в один поток на селекторе и nio... давайте почитаем про проблемму 10к соединений и какие подходы с ним справляются... да и вообще сервер в один поток - это перебор сокетов в цикле что на мой все таки взгляд является не правильным подходом... да такой сервер может выдержать большое кол-во подключений, но время отклика увеличивается причем на много...
а у фреймворка есть такая мощная вещь как асинхронные операции (оптимизированный пулл потоков) с помощью которого можно справится с 10000 соединениями...
Добавлено через 1 минуту
Zubastic Написал:А третий раз будет иначе? Одному человеку нужно иметь железные яйца, чтобы пилить все это соло ибо в противном случае тотальный зашквар.
Я просто теперь, когда уж вкрай за*бет, иду гулять в парк или в бар с друзьями. Потом желание возвращается xDD
Сообщений: 2,455
Тем: 53
Зарегистрирован: Apr 2010
Репутация:
19,728
krisadr;413123 Написал:Как видел в подписи у одного мембера зоны "то что написано в l2j это порнофильм с дешовыми порно актерами"(смысл такой) Призыв меня удался
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.
В общем и грубо говоря: они предназначены для веб-серверов, но уж никак не для гейм лоад сети.
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Сообщений: 832
Тем: 125
Зарегистрирован: Jan 2009
Репутация:
404
06-04-2016, 10:53 PM
(Сообщение последний раз редактировалось: 06-04-2016, 10:55 PM krisadr.)
n3k0nation Написал:Лирика: как раз таки с проблемой 10к справляются с помощью селекторов, только, обычно, нескольких, которые работают параллельно, но уж никак не созданием по треду на каждого клиента. И работает селектор далеко не так, как представлено
.
ну мне в принципе не важно как он там на самом деле работает... смысл такой что в l2j один поток обрабатывает все подключения... без всякого распараллеливания.
Из вики
Nginx опирается на управляемую событиями архитектуру (асинхронную архитектуру) , вместо потоков, чтобы обрабатывать запросы[1]
Lighttpd опирается на асинхронную архитектуру обработки запросов[2]
Cherokee HTTP Server, лёгкий веб-сервер[3]
Tornado, неблокирующий веб-сервер и веб-фреймворк[4]
Node.js, асинхронный, неблокирующий веб-сервер, основанный на JavaScript-движке V8[5]
Yaws использует концепцию легковесных процессов языка Erlang, даёт возможность использовать большое их количество с высокой конкурентностью.
можно сказать что большинство решений опирается именно на асинхронную обработку соединений... я честно говоря не знаю реализации пула потоков во фреймверке от мс, но все таки думаю что там не дураки сидят, и сделали все максимально оптимально, насколько это возможно... изначально в пуле для приложения на нет выдается 1023 потока... добавить еще пару тысяч и думаю все попрет как по маслу xDDD разумеется все это будет тестироваться.
Добавлено через 2 минуты
n3k0nation Написал:Призыв меня удался
В то время, когда это все писалось, еще не было 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.
В общем и грубо говоря: они предназначены для веб-серверов, но уж никак не для гейм лоад сети.
То было одно время, сейчас другое, почему бы не использовать новые доступные технологии)
Сообщений: 2,455
Тем: 53
Зарегистрирован: Apr 2010
Репутация:
19,728
06-05-2016, 12:09 AM
(Сообщение последний раз редактировалось: 06-05-2016, 01:24 AM n3k0nation.)
krisadr;413138 Написал:ну мне в принципе не важно как он там на самом деле работает... смысл такой что в l2j один поток обрабатывает все подключения... без всякого распараллеливания.
Из вики
Nginx опирается на управляемую событиями архитектуру (асинхронную архитектуру) , вместо потоков, чтобы обрабатывать запросы[1]
Lighttpd опирается на асинхронную архитектуру обработки запросов[2]
Cherokee HTTP Server, лёгкий веб-сервер[3]
Tornado, неблокирующий веб-сервер и веб-фреймворк[4]
Node.js, асинхронный, неблокирующий веб-сервер, основанный на JavaScript-движке V8[5]
Yaws использует концепцию легковесных процессов языка Erlang, даёт возможность использовать большое их количество с высокой конкурентностью.
Суждение по nginx
Вы путаете теплое с мягким.
Вся эта "асинхронная архитектура", подразумевает non-blocking режим работы, где создается несколько потоков, которые обрабатывают события, вот и вся "асинхронность". То же самое, что и селектор, но там их несколько. Проблема в том, что реальный асинк линукс не умеет (не берем в расчет BSD), в отличие от Win. Хотя, что там у винды под капотом - трудно узнать.
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Сообщений: 287
Тем: 24
Зарегистрирован: Feb 2010
Репутация:
919
krisadr Написал:а у фреймворка есть такая мощная вещь как асинхронные операции (оптимизированный пулл потоков) с помощью которого можно справится с 10000 соединениями...
Лично мне не приходилось лицезреть выше 2к онлайна на одном сервере с 2014 года. Такие извращения либо бессмысленны и беспощадны, либо чрезмерно оптимистичны kappa
Сообщений: 832
Тем: 125
Зарегистрирован: Jan 2009
Репутация:
404
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, а с релизной оптимизацией все будет летать еще быстрее)
Сообщений: 287
Тем: 24
Зарегистрирован: Feb 2010
Репутация:
919
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 мобов и квесты туда же.
Сообщений: 832
Тем: 125
Зарегистрирован: Jan 2009
Репутация:
404
Connie Написал:Это круто, что у Вас получается делать то, что нравится.
Такие разговоры навевают на меня воспоминания о том, как кое-кто делал L2 на UE3.
Добавлю немного пессимизма - подумайте о том, что Вам нужно будет написать не только ядро сервера, но и все эффекты скиллов, AI мобов и квесты туда же.
не все сразу) тут нужно делать не спеша и постепенно... торопится мне пока что некуда. Я все таки считаю что сервер написать куда проще чем клиент, а про 3d анимацию, модели, текстуры я вообще молчу... а так хоть есть шанс написать что то свое и работающее так как ты считаешь нужным)) ибо колоссальная работа над клиентом сделана до тебя, к тому же пакетная чать тоже распилена до зубчика - бери не хочу.... по мне так это единственный возможный вариант одному сделать что то стоящие.
Честно говоря меня не сколько логика скиллов или АИ мобов пугает, сколько реализация геодаты, и поиска пути... в геодате я точно поплыву потому что там тупо байты, тут я не силен, что далеко ходить - для того чтобы понять как шифруется\дешифруется трафик и реализовать, у меня ушло часов 5 почти непрерывного шаманства... вроде все сделал как нужно и на тебе при дешифровке чексумма не сходилась... оказывается я с самого начала забыл про обратную последовательность байтов в трафике l2... пришлось переделывать. Вообщем пока что побегаем без геодаты и поиска пути... у меня уже дикие мысли возникают о ручной реализации геодаты и системы вейпоинтов xDD, а может мне просто нужно пойти поспать и завтра придумаю более оптимальный вариант.
Сообщений: 89
Тем: 6
Зарегистрирован: Feb 2013
Репутация:
182
Где 2009 , где 2016. Линейка умирает не по дням а по часам. Нет той аудитории, которая была даже в 2013.
Сообщений: 437
Тем: 7
Зарегистрирован: May 2011
Репутация:
2,580
krisadr, https://github.com/Elfocrash/L2dotNET - тут ребята тоже пишут сервер л2 с нуля на шарпе, может будет интересно глянуть.
PS тему не читал, но осуждаю за шарп, а за предоставление результата бенчмарков без кода самих бенчмарков вообще тихо ненавижу.
|