Сложность в выборе стека технологий.
| |
boraicho | Дата: Пятница, 27 Января 2017, 02:41 | Сообщение # 1 |
уже был
Сейчас нет на сайте
| Всем привет. Нужны советы, касательно стека технологий. Идея сделать текстовую браузерную rpg, где по сути сначала будет только статичные страницы, автоматические бои и т.д. Но с расширением в будущем, до более интересного функционала. Пытаюсь выбрать на чем же писать все это дело. Сам я владею C#, ASP.net, mssql, а также веб JS+html+css, react(redux+router). Есть большой соблазн писать на react + сервер на node.js. Тут проблема возникает в node.js мало того, что я в нём только только разбираюсь. так ещё как я понял он больше предназначен для решения задачи по типу, взял данные, отдал данные. А в игре сервер должен будет порой делать сложные вычисления, которые на стороне клиента делать небезопасно, + беспокоюсь за безопасность стека React+node, потому что вообще плохо представляю себе их защищённость(материала почти нет). С другой стороны, я уверен что у меня отлично бы получилось сделать back-end часть на C#, но мне кажется что asp.net будет слишком избыточен для реализации front-end. Поделитесь своими мыслями)
|
|
| |
Kwant | Дата: Пятница, 27 Января 2017, 04:27 | Сообщение # 2 |
почетный гость
Сейчас нет на сайте
| Делай на Node.js и React (если в нём такой богатый опыт).
> ... так ещё как я понял он больше предназначен для решения задачи по типу, взял данные, отдал данные...
Нет. Чтобы не возникало подобных вопросов, о проблемах Node.js, надо понять суть технологии: зачем нужна многопоточность, а зачем event-loop.
> ... А в игре сервер должен будет порой делать сложные вычисления...
Что это за вычисления такие? Что такое потребуется вычислять, что смогло бы сильно затормозить Node.js.
Если что, то ей по силам выдавать около 5к RPS на каком-нить просто web фреймворке. Мне почему-то кажется, что скорее в этот предел можно упереться, чем в вычислительный.
Стек: MySQL (транзакции) + NodeJs (рекомендуется использование async/await/promise) + React + Socket.io = игра за часик
> ... мало того, что я в нём только только разбираюсь ...
Непросто будет. Многие считают, что Node.js это "изи катка", но как только накосячат с колбеками/утечками/функциями (что приводят к деградации скорости), так сразу погружаются во мрак неопределённого поведения и многочасовых дебагов.
Если игра простая, действительно простая, то можно взять NodeJs . Если хочется что-то сложное, то изучать Node.js можно как и пару месяцев, так и 6-12 месяцев. Индивидуально всё.
|
|
| |
boraicho | Дата: Пятница, 27 Января 2017, 11:38 | Сообщение # 3 |
уже был
Сейчас нет на сайте
| А что касается безопасности у node.js? Пока что нашёл мало информации, а вопросов много(подделка запросов, cookie, ).А что касатеся sql бд, то во многих источниках написано что это не лучшее решение, потому что node.js плохо контактирует с РСУБД, почитал про mongoDB, и понял что не реляционная БД не подойдёт для решения задачи. Кажется все таки, все больше и больше за ASP.net
|
|
| |
dalikivug | Дата: Пятница, 27 Января 2017, 13:00 | Сообщение # 4 |
почетный гость
Сейчас нет на сайте
| Кажется стоит убрать из владения React, да и ASP.NET видимо тоже Т.к. node - это считай тот же браузерный движек, с доступом к системному IO
Цитата boraicho ( ) asp.net будет слишком избыточен для реализации front-end а серверная часть кроме рендера (который можно сменить) никак фронт не трогает
Цитата boraicho ( ) А что касается безопасности у node.js полностью на плечах программиста и того что он использует, ровно как и во всех других случаях, на любых других языках
mongodb считается родной для node, т.к. работает с документами, в JSON-подобном формате и очень просто взаимодействует с js для mysql есть так же полнофункциональные коннекторы
в ноде очень просто утонуть в собственном мусоре из кода поэтому раз уж вы склоняетесь к ASP.NET, то лучше ноду и не трогать
если вы (по внутренним ощущениям) плохо разбираетесь как в ноде, так и в .NET то лучше выбрать node, как более перспективную
|
|
| |
HellWalk | Дата: Пятница, 27 Января 2017, 16:59 | Сообщение # 5 |
почетный гость
Сейчас нет на сайте
| boraicho - отпишитесь потом о выборе, и практической стороне вопроса.
Также пилю браузерную MMORPG, и для себя решил, что так как хочу лучше разбираться в основах web-программирования - пишу на чистом PHP + MySQL + AJAX + JSON
В сторону node.js и всяких асинхронных штучек посматривал, но слишком мало практических отзывов в интернете. Потратить год на изучение, после которого окажется, что node.js хуже (конкретно для моего проекта), чем обычный PHP + AJAX - это будет полный фейл, по этому я не решаюсь экспериментировать.
|
|
| |
Kwant | Дата: Суббота, 28 Января 2017, 00:00 | Сообщение # 6 |
почетный гость
Сейчас нет на сайте
| > ... А что касается безопасности у node.js?
Что за безопасность беспокоит?
> ... вопросов много(подделка запросов, cookie, )
Это не Node.js проблема, а разработчика, такое же я проверну и на других платформах.
> ... А что касатеся sql бд, то во многих источниках написано что это не лучшее решение, потому что node.js плохо контактирует с РСУБД
Лучше приводить источники сюда в виде ссылок, по моему это "ни о чём" источники. Всё там порядок.
> ... но слишком мало практических отзывов в интернете
Специализируюсь в области Nodejs несколько лет, по этому скажу, что требует большого опыта. Новички не сделают сложных систем - шанс на получение скрытых проблем крайне велик. Будут постоянно что-то править или изучать, подпирать костылями. Платформа даёт широкий спектр возможностей + простота вхождения, но чудовищно требовательна к управлению этими возможностями.
> ... Потратить год на изучение, после которого окажется, что node.js хуже (конкретно для моего проекта), чем обычный PHP + AJAX - это будет полный фей
NodeJs ни как не будет хуже. Но нет смысла тратить время, если вы потом не будете работать с этой платформой и если проект не требователен.
Если PHP используется в обычном режиме, как потоки, а не async модель, то без каких-либо настроек и мощного железа удержите одновременный онлайн около 100 человек. Этого, обычно, достаточно для небольших поделок. Ведь если кто захочет, то может весьма просто положить сервер парой запросов.
В целом, на этой платформе создаётся без проблем любое дело, с пол пинка.
Сообщение отредактировал Kwant - Суббота, 28 Января 2017, 00:01 |
|
| |
HellWalk | Дата: Суббота, 28 Января 2017, 11:58 | Сообщение # 7 |
почетный гость
Сейчас нет на сайте
| Цитата Kwant ( ) Если PHP используется в обычном режиме, как потоки, а не async модель, то без каких-либо настроек и мощного железа удержите одновременный онлайн около 100 человек. Этого, обычно, достаточно для небольших поделок. Ведь если кто захочет, то может весьма просто положить сервер парой запросов. Ну, это откровенное вранье. У меня сейчас сайт на PHP, держит до 600 онлайна по вечерам (суточная посещаемость 15-20 тысяч человек).
Другое дело, когда к обычному "сайту на php" добавится функционал MMORPG - нагрузка вырастет. Но, опять же, на PHP, есть 100500 способов как снизить/оптимизировать нагрузку, а вот Node.Js - это, лично для меня, темный лес.
|
|
| |
Kwant | Дата: Воскресенье, 29 Января 2017, 04:40 | Сообщение # 8 |
почетный гость
Сейчас нет на сайте
| > ... Ну, это откровенное вранье. У меня сейчас сайт на PHP, держит до 600 онлайна по вечерам
600 все сразу или 600 просто бывают (некая очерёдность запросов)? Не надо говорить о вранье не понимая до конца о чём речь.
Реализуйте webSocket соединения на "600" и скажите какой онлайн.
Добавлено (29 января 2017, 04:40) --------------------------------------------- > ... Но, опять же, на PHP, есть 100500 способов как снизить/оптимизировать
И как оптимизируете подобную проблему выше? Суть NodeJs - это event-loop и если "прооптимизировать" PHP в этом направление, то выйдет тоже самое, что NodeJs, только ЯП другой (ну и коряво это всё выглядит конечно).
О чём тут и написано: > ... Если PHP используется в обычном режиме, как потоки, а не async модель...
Чтобы понимать проблему и как решать, да и вообще говорить об онлайне, надо понимать различие технологий.
"PHP" на каждый запрос создаст поток, который, как минимум, потратит 1-2Мб RAM. Чтобы решить проблему с поеданием RAM создаётся пул потоков, который может быть ограничен, что приводит к очереди запросов, что вызовет задержку на отклик и она будет расти также, как растёт кол-во запросов.
Это значит, что webScoket приложение на 600 человек на PHP вы не сделаете, если у вас не будет памяти невменяемое кол-во или если не превратите это в async модель. Ну а если это будет Ajax, то у вас будет всё больше и больше расти отклик от сервера, при условии, что люди будут повышать активность свою или своё кол-во на сайте - колхоз.
Сообщение отредактировал Kwant - Воскресенье, 29 Января 2017, 05:19 |
|
| |
HellWalk | Дата: Воскресенье, 29 Января 2017, 11:40 | Сообщение # 9 |
почетный гость
Сейчас нет на сайте
| Цитата Kwant ( ) 600 все сразу или 600 просто бывают (некая очерёдность запросов)? Спросите у liveinternet.ru как он определяет онлайн на сайте
Цитата Kwant ( ) Реализуйте webSocket соединения Зачем?
Цитата Kwant ( ) Это значит, что webScoket приложение на 600 человек на PHP вы не сделаете А зачем мне его делать?
Вы понимаете, что говорите человеку, у которого все работает, и все устраивает - "тебе срочно надо перейти на вебсокеты! вот прямо все бросай, и срочно переходи!"
Зачем? Если говорить о возможных проблемах с нагрузкой в будущем, то прежде всего надо понимать, что возможно браузерную MMORPG я просто и не доделаю. К тому же, нет никаких гарантий, что вебсокеты будут справляться с большим онлайном лучше. То, что вы сходу сказали, что PHP не выдержит одновременно 100 онлайна говорит о том, что возможности PHP вы сильно недооцениваете (а возможности NodeJs и вебсокетов, возможно, переоцениваете).
Сообщение отредактировал HellWalk - Воскресенье, 29 Января 2017, 11:42 |
|
| |
Kwant | Дата: Воскресенье, 29 Января 2017, 18:14 | Сообщение # 10 |
почетный гость
Сейчас нет на сайте
| > ... Зачем?
Чтобы ерунду не говорить, а читать внимательно то, что написано.
Цитирую: " ... Если PHP используется в обычном режиме, как потоки, а не async модель, то без каких-либо настроек и мощного железа удержите одновременный онлайн около 100 человек ... " " ... в обычном режиме, как потоки ... " " ... одновременный онлайн около 100 человек ... "
Не очередь, если всё ещё не ясно, а одновременный. Что означает удержание соединений постоянных. 1 поток = 1 соединение, если совсем уж указать на суть.
Добавлено (29 января 2017, 17:43) --------------------------------------------- Это вообще что ещё такое? > ... нет никаких гарантий, что вебсокеты будут справляться с большим онлайном лучше
Я уже дал объяснение почему они лучше (в какой то мере). Но вот только лучше конкретно не они тут, если хорошо разобраться. Проблема в менеджере потоков/процессов у PHP. Пример же выше (просьба реализации тестового окружения), с вебСокетом, просто провоцировал появление проблемы с потоками у PHP - для демонстрации.
ВебСокет - ключ/суть, ибо я имел ввиду вообще изначально именно эту технологию для 100 соединений, что даёт постоянные подключения и полнодуплексную связь. Но вы вклинились с заявление о лжи и с Ajax технологией.
> ... То, что вы сходу сказали, что PHP не выдержит одновременно 100 онлайна говорит о том, что возможности PHP вы сильно недооцениваете (а возможности NodeJs и вебсокетов, возможно, переоцениваете).
Господи, я лет 5+ веб-приложения создаю, что мне недооценивать или переооценивать, когда всё это пройденный путь. Устал разжёвывать очевидное. Просто читайте теорию, без зачем, если есть вопросы.
Добавлено (29 января 2017, 18:05) --------------------------------------------- > ... нет никаких гарантий, что вебсокеты будут справляться с большим онлайном лучше
А вот интересная статья, как дополнение (надеюсь не додумаетесь, что это инструкция и посыл к действиям для перехода), на 600 тыс соединений для webScoket + Nodejs: https://blog.jayway.com/2015/04/13/600k-concurrent-websocket-connections-on-aws-using-node-js/
Старовата правда. Сейчас, может, можно и побольше выбить.
Добавлено (29 января 2017, 18:14) --------------------------------------------- И ещё, я бы с удовольствием почитал где я такое говорю:
> ... Вы понимаете, что говорите человеку, у которого все работает, и все устраивает - "тебе срочно надо перейти на вебсокеты! вот прямо все бросай, и срочно переходи!"
Сообщение отредактировал Kwant - Воскресенье, 29 Января 2017, 19:21 |
|
| |
|