Обновить
4
0
Solver@solver

Back-end developer

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

Вы дажене удосужились почитать статью и посмотреть код…
У меня есть несколько потоков которые обрабатывают сообщения не глядя друг на друга, логика нигде не распарралеливается. Вы это можете понять? Поток берет сообщение и обрабатывает его не глядя что делается в других.
Это все равно что запустить как отдельные приложения. Логика там не парралелится… она в один поток работает.
Вот теперь понятно почему такие вопросы… у вас 10лет С++, джаву вы не знаете совсем, вот и странно для вас то, что для других очевидно.

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

Но вы, в попытках найти хоть что-то хреновое в моем решении, забыли один очень важный момент… мое решение, как я уже ни раз говорил, не претендует на звание самого крутого. Оно лишь позволяет решать задачу построения игрового сервера. Производительность решения совсем не маленькая, и достаточна реализации многих проектов. Да, я не спорю, что на java или на другом языке возможно написать более производительное решение, это в принципе понятно из многих факторов.
Идеал вообще не достижим.

И опять же, вы вместо того, чтобы напрягая знакомых, искать изъяны в моем предложении, лучше бы написали свое видение как надо делать игровые сервера… а то от таких как вы только понты и негатив идет…
Да и сомневаюсь я, что лично вы, без тех тех кто вам подсказал этот момент в моем сервере, способны придумать и реализовать более изящное решение… Так что все ваши потуги в общем-то прошли даром…
Мне лично вы ничего нового не сообщили и не доказали… люди которым моя статья поможет хоть что-то сделать, довольны. А идеальные сферические кони в вакууме далеко не всем нужны.
Да бог с вами )))
Если абстрагироваться от всего, однопотчные программы писать проще. Это очевидно. Но это не означает, что писать ВСЕ многопоточные программы невероятно сложно и связано с большим геморроем.

Это у вас хз какие цифры… это вы сравниваете геймсервер и редис, А моя цифра это вайтпеппер одного из самых популярных java серверов, на котором пишут и игры типа контры и фермы. Они тестили свой продукт и выложили тесты в открытый доступ. Там и железки описаны и прочие условия.

Да, игровой сервер это не месенджер, с этим трудно спорить… ну и что это доказывает? С таким же успехом могли аргументировать что-то типа, тролейбус не подвоная лодка…

Для игры подходит, ибо уже работает ))
И у меня нет «непонятного task parallelism'а».

Если вы не внимательно читали, то у меня и есть N-однопоточных серверов… количество N варьируется исходя из задачи. Только вы почему-то считаете, что запуск разных потоков одного приложения на разных машинах это не однопоток, а тот же самый запуск разных потоков, но на одной многопроцессорной машине это не одно поток…

Весьма странные у вас представления о распараллеливании вычислений…
>Я утверждаю что ваша архитектура для игровых серверов — очень далека от той, которой следовало бы называться «производительной» :)

Да вы что… Может просветите, что такое «производительный»?
И почему 150-300к сообщений на одном стандартном сервере это очень плохая производительность…
Просто понравилась картинка… ну и опять же, там сервера изображены, вроде как в тему )
Протобаф вообще об этом ничего не знает, он только берет объект и делает из него набор байтов и наоборот.
В общем понятно… вы доказываете непонятно что… и сами себе противоречите…
>Ну так надо было написать что решение подходит для игр типа фермы.
У меня на нем сделана игра типа танков он лайн. О_о охренеть… надо будет на ридис переписать, в одном потоке…

>Можно, но кому это надо? Только себе проблемы создавать.
Проблемы с многопоточностью есть только у вас видимо…

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

>А зачем на одном сервере обрабатывать столько клиентов?
Ну как же? Вы же всю беседу утверждаете, что один поток разрулит абсолютно все. А теперь съезжаете, на параллельную обработку.

У EVE просто дохрена проблем, больше 500 человек в одном месте (читай на одном шареде) приводят к сильнейшим лагам. Так что и там не идеально все… хотя постойте, предложите им переписать всю игру на редис в одном потоке. Они ва мбабок заплатят )

Да, я предлагаю такую архитектуру, как и другие наверно. Не вижу в этом ничего плохого, ибо она работает. И работает хорошо. Хоть это и не самое лучшее решение всех проблем в мире. Вы вот вообще ничего не предлагаете, а только пальцы гнете.
Протобуф здесь косвенно, просто как протокол, на его месте может быть любой другой.
проблема в том, что от клиента серверу и обратно идет поток байтов. Внимание вопрос: Где начинается и заканчивается сообщение? Для программы все байтики одинаковые.
Вот в этом и проблема, надо сообщения как-то разделять. Самый удобный, это первым передать длину сообщения, потом тело сообщения.
т.е. поток будет выглядеть так: длина.тело, длина.тело, длина.тело.
Наша программа считывает первое число и знает сколько байт ей надо прочитать чтобы получить одно целое сообщение. Получает эти байтику и вот тут уже вступает в дело наш протокол, в данном случае протобуф, он десериализует эти байтики в понятный программе объект.
Как видно, дело тут не в протобуфе, а втом, что поток надо разделять на сообщения.
Вот весь этот процесс и имплементирован в Netty. Если у вас и сервер и клиент на netty, то весь процесс будет прозрачным и удобным.
Но если у вас клиент на флеше, то весь этот процесс, разделения потока на сообщения, надо делать самому. Что в общем совсем не сложно.
Вы неправильно прочитали. У меня написано, что не получится использовать поддержку протобуф в нетти, а не то что протобуф вообще нельзя использовать.
1. Ну в принципе да…
2. Большое количество вопросов по Java, связана с тем, что на ней просто большое число людей пишет. И никак не говорит о сложности написания клиентов вообще.
3. Этой проблемы вообще нет. Java NIO не зависит от 32 или 64 платформы. За свою многолетнюю практику столкнулся всего один раз с различиями, когда надо было с железкой напрямую через COM порт общаться. Но что-то не припомню чтобы такое было необходимо в игровом клиенте ) Да и обходилась эта проблем 3-мя строчками кода. Т.е. проблемы то и не было.
4. Спасибо КЭП, мы тут просто не в курсе были, что писать сетевые клиенты можно на чем-то кроме java ))
Это пять!!!
Написать программу не используя ни одного new это надо быть как минимум гением ))
Вы просто фанатик… вам что-то объяснять просто бесполезно, вы как бык на красную тряпку, бросаетесь просто на слово Java.
1. Где я в статье сказал хоть раз. что это самое крутое мега решение всех времен и народов?
2. Почему вы считаете, что игровую логику невозможно распараллелить? Где в статье написано, что для случаев, когда логика не распараллеливается ОБЯЗАТЕЛЬНО надо делать несколько потоков? Кто мешает в этом случае запустить один поток?
3. Какие нахрен студенты? SmartFoxServer, Electroserver например выпускаеют сервера на джаве которые на одном сервере по 300к сообщений обрабатывают. Тысячи игр сделаны на их серверах. И эти, омайн год, школьники нихрена не понимают в колбасных обрезках… надо было им делать свои сервера на редисе… это точно. В однотреде.

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

P.S. Если вы такой умный, то опишите как вы будете обрабатывать 100к или 300к клиентов на игровом сервере в одном треде… а мы посмотрим. А то вы пока только пальцы гнете, что однотред лучше в 100 раз.
Зачем делать все в одном треде, если один тред дает например 10к сообщений, а 3 треда 30к сообщений???
Ну вот нахрена это? Я понимаю, что есть ситуации которые распараллелить если и можно, то очень сложно. Но это далеко не всегда так. Абсолютно все делают игровые сервера многотредовыми, я просто ни разу в инете не встречал примеров многопользовательских игровых серверов с одним тредом. Вы сами то хоть один сделали?
И не надо приводить тут базы данных… хорошо?
Вы бредите…
«один поток вполне может обслужить несколько десятков тысяч подключённых клиентов»
Вы с этим согласны.
Но когда я в своей статье привожу пример когда запускается 2-3-4 таких потока параллельно, у вас случается приступ…
Не находите противоречия?
Если железа много и оно позволяет запустить 2-3-4 потока параллельно, то почему этого не сделать? Ведь все равно 1 поток не нагрузит весь процессор, каким бы крутым язык программирования не был.
Что именно у вас вызывает такую бурю эмоций?
Может хватит сравнивать хрен с пальцем?
Зачем мне ваши транзакции в БД?
Приведите пример сетевой части для игрового сервера на другом языке с другой архитектурой, расскажите как надо делать. Я и другие хабравчане вам большое спасибо скажем.

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

P.S. Мои цифры не выдуманы, это тесты сервера на Java находящиеся в открытом доступе.
Товарищи, неужели вы думаете что написав бездоказательную, многозначительную ерунду, вы будете выглядеть круто?

1. Причем тут клиенты на java вообще? топик про серверную часть.
2. Где пруфы на статистику, по которой клиент на java требует много костылей.
3. Какие вообще костыли на java клиенте?? Например мои клиенты работают на винде и линухе без проблем и каких бы то ни было костылей.
4. Больше костылей по сравнению с чем?

Может хватить уже писать многозначительную ерунду не по теме?
Еще раз поясняю.
В нетти встроены кодер и декодер фреймов для протобуфа. А не сам протобуф.
Т.е. из потока байтов нетти сама может выделять сообщения. То что вы привели это совсем другое. Это всего лишь генерация смого протобуфа. При этом вопрос разделения потока байтов на сообщения остается в ваших руках.
Я понятно излагаю?
И что это показывает? Что ваш редис может столько же переварить запросов сколько сервер на джаве…

Вы не увиливаейте, пернули в лужу, так будьте добры показать как на редисе сделать игровой реалтайм сервер.
Дык никто не говорит что html5 это плохо.
Вопрос был заменяет полноценно? Ответ — нет.
И действительно пока еще полноценно заменить не может.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность