Какой сервер?
| |
Vinchensoo | Дата: Суббота, 12 Декабря 2015, 13:07 | Сообщение # 21 |
Злобный социопат с комплексом Бога
Сейчас нет на сайте
| Цитата KamiRonin ( ) Пишется, имеет, практикуется и доводится ровно настолько насколько нужно!..
Покажите мне написанный вами игровой сервер? Ну позязя
Цитата KamiRonin ( ) я в каждом посте кинул ссылку и не одну - как это реализовывают за короткое время без крупных усилий.. эти ссылки - мои доводы (помимо собственного опыта).
Я не смотрел все ссылки. Та ссылка, что относится к nodeJS - не имеет ничего общего с реальной жизнью, я могу еще раз повториться. Я читал эту статью, когда только начинал работать на nodeJS (года 2 назад), это сугубо синтетический пример, в котором у сервера нет ВООБЩЕ никакой более-менее сложной логики.
Цитата KamiRonin ( ) хотя ладно.. кто читает - пусть сам посмотрит что ему подойдет! ) мой главный посыл - НЕ НУЖНО БОЯТЬСЯ ПИСАТЬ сервера самостоятельно, ничего особо сложного там нет! (если идти по шагам, по этапам)!!
Ваш посыл не верен. Не нужно боятся писать- да, возможно. Ничего сложного- нет, это не так.
Цитата KamiRonin ( ) ! это ваша судьба!" ???! )) Наша судьба- писать ПО, нам за это деньги платят =) А не спорить на форуме по поводу какой-то сферической фигни. Свой сервер для сложной игры будет стоить сотни нефти, крови, боли и пота, за все это бизнес никогда платить не будет, когда можно взять готовое решение и делать продукт? Мне кажется, здесь форум разработчиков игр, а не сетевых решений и люди, которые тут задают вопросы- хотят делать игры, а не ковыряться со скучными техническими вещами.
Цитата KamiRonin ( ) А алгоритм игрового многопоточного сервера в одном предложении умещается (tcp) "получи строго сформулированный пакет, определи его сигнатуру (что он собой представляет - команду, данные, сообщение), проверь разрешения, транслируй это другим подключенным клиентам / выполни команду (если пришла команда) / запиши данные (если пришли данные)". Где тут тяжко трудно сложно невозможно нереально экстремально и тп??!?! Ну да, игровые многопоточные сервера - это так просто. Я уж молчу, что для некоторых игр ТСР, например, вообще не применим, нужен UDP. Поверх него нужно реализовывать свой контроль получения пакетов, либо другие механизмы (типа интерполяции для тех же координат). А в готово сервере достаточно поправить 1 строчку в конфиге. Что, у вас в игровом сервере ничего сложнее чата нет? Синхронизация данных между потоками, синхронизация с базой, кеши, игровые комнаты, кластеризация, разделение нагрузки, роутинг запросов- ну дейсвительно, работы на пару днейт =)
|
|
| |
KamiRonin | Дата: Суббота, 12 Декабря 2015, 18:42 | Сообщение # 22 |
почти ветеран
Сейчас нет на сайте
| сервер на node.js я выписывал по шарповской отладке, поэтому запустил, погонял, показалось неудобно и перевел на Qt весь функционал, чтобы максимизировать эффективность под линухом.. написал и оставил - сервак выполняет все нужные функции без каких либо заморочек с мороком по поводу разделения нагрузки и тп.. нет такой необходимости - на тестах он показал 5000 подключений вообще без напрягов - на ближайшее время хватит за глаза.. а кому нужно тот пусть и долбит кластеризации и прочие игровые комнаты (ничего в них сложного нет!!! как и в роутингах с кэшами!)
Цитата Vinchensoo ( ) Ну позязя ууу, нуу все.. позязя начались.. :-/ ок.. )) для себя считаю полемику исчерпанной, как вопрос интерполяции координат НА СЕРВАКЕ.. пфф.. )
Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
|
|
| |
Vinchensoo | Дата: Суббота, 12 Декабря 2015, 19:13 | Сообщение # 23 |
Злобный социопат с комплексом Бога
Сейчас нет на сайте
| Цитата KamiRonin ( ) сервер на node.js я выписывал по шарповской отладке, поэтому запустил, погонял, показалось неудобно и перевел на Qt весь функционал, чтобы максимизировать эффективность под линухом.. написал и оставил - сервак выполняет все нужные функции без каких либо заморочек с мороком по поводу разделения нагрузки и тп.. нет такой необходимости - на тестах он показал 5000 подключений вообще без напрягов - на ближайшее время хватит за глаза.. а кому нужно тот пусть и долбит кластеризации и прочие игровые комнаты (ничего в них сложного нет!!! как и в роутингах с кэшами!)
Я обожаю пассажи про "на тестах он показал 5к подключений без напрягов". Примерно также, как 15минутный сервер на ноде показывает 1 млн синтетики, угу. Вы вообще в курсе, что когда люди пишут онлайн игру, то они рассчитывают зарабатывать с нее деньги? Если игра поперла, и у вас вчера было 4000 игроков, а сегодня внезапно стало 6000, а послезавтра- 10 000, вы что делать будете? С горящей задницей бегать и переписывать все на готовое решение, оптимизировать свой велосипед (ну пока нам 10000 хватит, давайте допилим, а потом подумаем. В итоге пока допилили- игроков уже 15 000, а лаги все продолжаются -> капец проекту).
Если мы изначально говорим о любительской разработке с надеждой поиметь 500 активных пользователей и 50 онлайна, то сервер можно писать хоть на game maker. Но зачем для любительской разработки все эти сложности, копание с низкоуровневой скукотой, когда можно взять готовое решение и делать ИГРУ, где будут ездить танчики, летать самолетики и тд. Видимый прогресс - мотивирует. Написанный сетевой фреймворк объемом в 1к строк- не мотивирует.
Цитата KamiRonin ( ) как вопрос интерполяции координат НА СЕРВАКЕ.. пфф.. )
У вас игрок в консоли сервера играет или запросы ваершарком шлет? Игра- комплексный продукт.
К слову, я лично написал свой небольшой сетевой фреймворк на nodeJS, но мне так проще, потому что я понимаю, что делаю. И для меня это всего лишь хобби, с надежной найти 500 фанатов =)
А вот советовать человеку, который задает вопрос "как пильнуть танки, пацаны?" - это прям какой-то садизм
Совсем недавний пример от "знакомых": На днях запускали проект в одной крупной социальной сети. Игра с браузерным клиентом. В итоге из-за внезапной нагрузки игроки не могли даже достучаться на сервер, не то, чтобы поиграть. По оценкам знакомых- потеряли около 100к инсталлов из-за этой проблемы.
Цитата KamiRonin ( ) для себя считаю полемику исчерпанной Ну и класс.
|
|
| |
KamiRonin | Дата: Суббота, 12 Декабря 2015, 19:33 | Сообщение # 24 |
почти ветеран
Сейчас нет на сайте
| Ну обожай пассажи.. хто ж тебе мешает!! Тесты же нужны для того чтобы.. чтобы.. ни для чего по твоему видать! Дураки тесты придумали, и создали гребанную тучу инфраструктуры, чтобы их создавать! ) аха.. но даже это фигня - потому что я просто создал нагрузочное приложение - которое плодит подключения и коннектясь к серваку проводит прокачку ему игровых данных - обращения к базе скуля, посылки типовых пакетов без перерыва.. мне показал проект 5000 я сказал - стоп, если посещаемость будет по стату выше 1000 в час - буду решать о расширении аппаратной части и напишу микромодуль перенаправления коннекта... и не стал угорело рвать на себе волосы - мол, аааа а вдруг предут 10000 в секунду а у меня тут не прибрано!! :) пипец логика млин!! )) до такого уровня посещений в котором стоит вообще дергаться, не то, что с горящей задницей бегать млин -- не один год может пройти!
Цитата Vinchensoo ( ) У вас игрок в консоли сервера играет или запросы ваершарком шлет нет, обычный шарп клиент с отправкой координат позиции тела + экшн пакетов разного рода + чат. все равно интерполяции координат делаются на клиенте при получении изменения позиций аватаров у него..
Цитата Vinchensoo ( ) К слову, я лично написал свой небольшой сетевой фреймворк на nodeJS, ёёксель моксель - аж фреймворк млина! ну видать там и кластеризация и роуминг и интерполяция - все при нем!! :D
Цитата Vinchensoo ( ) Ну и класс. еще бы тебе не класс - сказал без доводов свое "веское" и видно пошел фреймворк допиливать!! а потом вернулся и еще "имхошек" накидал... самое то - когда аппанет видя, что тут все глухо - машет рукой - тебе раздолье сразу!! а то!! доводов от тебя кроме "это было 2 года назад" - мы так и не увидели! ) досужее все.. поэтому на твоих "позязя" я и хотел закончить "обсуждать сферический вакуум"! Но нееет, ты ж так просто не предашь свое имхо!?
Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
Сообщение отредактировал KamiRonin - Суббота, 12 Декабря 2015, 19:35 |
|
| |
Vinchensoo | Дата: Суббота, 12 Декабря 2015, 20:31 | Сообщение # 25 |
Злобный социопат с комплексом Бога
Сейчас нет на сайте
| Цитата KamiRonin ( ) о даже это фигня - потому что я просто создал нагрузочное приложение - которое плодит подключения и коннектясь к серваку проводит прокачку ему игровых данных - обращения к базе скуля, посылки типовых пакетов без перерыва.. мне показал проект 5000 я сказал - стоп, если посещаемость будет по стату выше 1000 в час - буду решать о расширении аппаратной части и напишу микромодуль перенаправления коннекта.. О чем я и говорил. Подобным тестам- цена не только грош, даже меньше. 1. Тестирование имеет смысл проводить только с помощью специализированного ПО. Видимо инструменты типа JMeter пишутся просто потому, что пацаны не додумались создать консольное приложение и кидать запросы. 2. Тестирование "предполагаемого онлайна" и тестирование пропускной способности сетевого движка- вещи, тащем-то, совсем разные, чего вы тоже не понимаете. 3. Тестирование проводится на работающем прототипе 4. Тестирование проводится при наличии рабочей схемы БД, когда прототип близок к завершению, утверждена схема, таблицы созданы и заполнены, ибо логика и производительность тех же запросов тоже могут немножко влиять на производительность игры в целом. 5. Тестирование проводится, когда готова часть логики, которую стоит тестировать 6. Тестирование проводится не по локалхосту (надо объяснять, как работает OSI и откуда берутся задержки, хоть и малые по сравнению с пингом). 7. Тестирование нужно проводить не с одной машины, а с нескольких, учитывая пинги. 8. Нужно тестировать ситуацию с потерей части данных из-за фигового интернета.
Надо ли объяснять, что ваше консольное приложение при всем желании не способно эффективно использовать более 4 потоков, а значит все ваше тестирование - унылый аналог ДДОСА (причем, некачественный)?
Если у вас уже все на стадии альфы (раз вы это тестируете и рассуждаете о сферическом онлайне), в чем была проблема предоставить ссылку и уесть меня сразу, 1 строкой? Или код нагрузочного теста хотя бы, раз о нем разговор?
Ну и напоследок, раз вам уже так понравилась моя фраза про интерполяцию координат, подумайте, каким образом в ГРАМОТНЫХ играх работает Path Finding, проверки столкновений, возможности попаданий пули и прочее.
За сим я с вами беседовать больше не намерен. Вы мало того, что не особо понимаете предмет разговора, так еще и банально невоспитанны и общаетесь на уровне гопников в подъезде. У меня слишком мало свободного времени, чтобы тратить его на разговоры с тем, кто не хочет слушать =)
ЗЫ- присылайте приглашение, с удовольствием поучаствую в тестировании вашей игры, когда она увидит свет.
|
|
| |
Edison6 | Дата: Суббота, 12 Декабря 2015, 21:16 | Сообщение # 26 |
TRUE Programmer
Сейчас нет на сайте
| Винч vs C# "программист" 1 : 0
Берил сбрей усы
Сообщение отредактировал Edison6 - Суббота, 12 Декабря 2015, 21:17 |
|
| |
KamiRonin | Дата: Воскресенье, 13 Декабря 2015, 08:19 | Сообщение # 27 |
почти ветеран
Сейчас нет на сайте
| Цитата KamiRonin ( ) для себя считаю полемику исчерпанной уже было..
Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
|
|
| |
JOKFEN | Дата: Вторник, 15 Декабря 2015, 20:33 | Сообщение # 28 |
был не раз
Сейчас нет на сайте
| KamiRonin, Извиняюсь, вот несколько дней уже бьюсь, так с мертвой точки и не сдвинулся, что очень огорчает По сути QT слушает определённый порт на подключение к нему и принимает пакеты в little endian (0101). А Unity хочет подключится к серверу он отправляет пакет, но уже с Big Endian (1010). В теории unity и QT должны тупо на выходе преобразовывать эти пакеты на противоположный и всё будет норм. Теперь вопрос как это сделать в QT и Unity? Нашёл такую статью для unity, но чёт далёк от понимания, зачем то зачем сё. В какую сторону смотреть?
|
|
| |
KamiRonin | Дата: Вторник, 15 Декабря 2015, 22:54 | Сообщение # 29 |
почти ветеран
Сейчас нет на сайте
| Цитата JOKFEN ( ) В теории unity и QT должны тупо на выходе преобразовывать эти пакеты на противоположный и всё будет норм. не, не "должны". автоматом не станет работать, только своим кодом преобразовывать. например, Qt строку из потока сокета считывает в порядке: размер (UInt32), и цепочка символов (каждый UInt16 или ushort). шарп автоматом формирует пакет немного иначе - размер Int32, символы (char или short) причем в BigEndian; поэтому и нужно привести к Qt виду перед отправкой - для чего пишется небольшая функция (или делать это на сервере при получении).
в той статье которую ты нашел - как рза и показаны функции такого преобразования.
в общем - для связи Qt и шарпа эта тема и есть самая муторная - ее один раз нужно пройти, написать свой набор служебных функций и дальше уже все делать через них. на самом деле там их всего около 4-5 и они все небольшие. вот тут про порядок следования байт было.. здесь пример реализации.. и тп поиск по словам "порядок байт TCP" - я когда разбирался просто сделал простейшие клиента и сервера - отправлял данные и смотрел порядок байт через отладчик и в шарпе и в Qt. очень быстро стало ясно кто как формирует пакеты в своих классах.
сразу скажу - все упирается в выбранный формат обмена - т.е. тебе нужно определиться с логикой, пакетов чтобы и на сервере и на клиенте иметь ожидаемые части. передаем Vector3, Quaternion, int, float, string + каждый пакет может быть разного значения. тут каждый выбирает сам как организовать работу с этим "форматом" - кто то унифицирует пакеты (строгая одинаковая структура) - но это может привести к излишкам передаваемой информации; кто-то считает что нужно все свести к минимуму трафика любой ценой (почти всегда хорошо). большинство готовых решений просто серилизуют пакет информации во что то свое (передается в любом случае последовательность байт - но вот структура этой последовательности как раз и важна), передают, а на другом конце, после десериализации уже выстраивается линия поведения с полученными данными исходя из их содержания.
Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
Сообщение отредактировал KamiRonin - Вторник, 15 Декабря 2015, 23:10 |
|
| |
8Observer8 | Дата: Среда, 16 Декабря 2015, 17:01 | Сообщение # 30 |
заслуженный участник
Сейчас нет на сайте
| Я изучаю и пробую UNet для кооператива небольших демок. Пока на локалке пробую. Мне хочется найти способ, как можно удалённо соединиться по UNet.
Сообщение отредактировал 8Observer8 - Среда, 16 Декабря 2015, 17:05 |
|
| |
|