Какими языками и инструментарией лучше пользоваться, чтобы написать браузерную игру?
Привет, Хабр!
Приношу извинения. На сонную голову опубликовал вопрос в хабы :)
В планах написать свою браузерную стратегию, в которой содержится понятие «реального времени». То есть поставил, например, здание строится и оно строится 20 минут, даже если игрок вышел.
В данный момент пишу в связке Js+PHP, но мне уже не нравятся «костыли», которые пришлось сделать для этого.
Можете посоветовать что лучше подойдет под эти цели?
P.S. JavaScript использую точно, менять его не собираюсь. Больше интересует серверная часть и какая-то замена PHP.
Бэкенд на nodejs, фронтенд на javascript, транспорт через websockets. Если потребуется база данных, возможно есть смысл взять mongodb/couchdb, т.к они хранят данные в json, что удобно, т.к и на фронте и на бэке яваскрипт.
Вместо php — node.js, т.к. сможете использовать один и тот же код для игровой логике и на клиенте и на сервере. Еще я бы рекомендовал писать не на голом JS, а на Haxe или хотя бы TypeScript.
А что по поводу БД? Предполагается такой подход по хранению карт: 3 таблицы (список систем, которые есть в игре, список планет и id системы, к которой эта планета принадлежит. И еще одна таблица для хранения именно клетки с id планеты, которой эта клетка принадлежит. Таким образом я хочу снять нагрузку с канала и базы, чтобы оперировать можно было только с одной клеткой. Какую базу для этого лучше использовать? MySQL потянет?
Удобнее всего, конечно, использовать тот же язык, что и на фронтенде, то есть node.js и websockets. Но для данных целей (небольшое количество запросов) будет более чем достаточно PHP в связке с Realplexor-ом.
PHP не подходит здесь из-за того, что нужно постоянно держать соединение с сервером. Начал писать на PHP+AJAX, но все равно это не то, чего хотелось бы. WebSocket'ы думаю подойдут для этой цели. Спасибо.
Меня больше интересует серверная часть, а эти движки предоставляют лишь работу с клиентской частью. Та и готовые движки я не хочу использовать, дабы набить руки на разработке.
А по большому счету без разницы, но начния сейчас писать браузерную MMORTS с нуля, то архитектура была бы такой:
Основа — какая-то готовая (а может и самописная, если не получится подходящего найти) система очередей запланированных событий с привязками к популярным на сервер-сайде языкам
Легковесный websocket-сервер (попробовал бы ноду для интереса, но имея в виду phpdaemon), мониторящий события из очереди для подключенных клиентов и оповещающий клиентов об этих событиях.
Тяжеловесный бэкенд, который по синхронному запросу клиента генерирует данные по прошедшим событиям, вытягивая их из очереди и добавляет новые события, если они инициированы запросом.
Забыл про клиента. При аутенфикации устанавливает асинхронное соединение с легковесным сервером (на самом деле чуть погрячился выше насчет вебсокетов, нужна просто любая пуш технология), получает с него данные, а потом ждет событий от сервера, по таймеру предсказывая события о которых ему уже известно известно (пока не получит от сервера новых данных эти события уже обсчитанных или аннулированных).
В теории да, если так узко ставить вопрос. На клиент-сайде от JS вы никуда не денетесь, как бы ни маскировались под *S :) Но вот с сервер-сайдом могут быть проблемы. В частности с моим привычно любимым PHP. Есть PhpDaemon, обеспечивающий навскидку большую функциональность или производительность, чем node.js или EventMachine (on Ruby:), но зато не требующий вникатьв новый *-way, за который будут конструктивно ругать или, хуже того, неконструктивно ржать. Хотя, хрен его знает, мне уже давно твердят на Хабре, что я перерос PHP — правда только один предложил мне перейти на зарплтау сравнимую с текущей. Вернее я предложил меньше текущей типа ка джуниор ни фига не знающий, а он мне как джуниору предложил много большую как я мог бы рассчитывать как миддл.
Как и большинство посоветую node.js, главное вкурить в него и понять механизм работы, в этом случае вы не словите проблем, которые сможете словить с PHP. Тут из больших бонусов:
— Отсутствие блокировок
— Один процесс обрабатывает множество запросов
— Возможность хранения одного экземпляра данных и взаимодействие с данными не потребуют блокировок
Спасибо. Начал читать о ноде. Поначалу все красиво и нравится, но посмотрим что напишет OnYourLips. Не хочу браться за то, что может заставить заново все переписывать.
Я уже 8-й год пишу игру (World Of Rest).
Использую только PHP+MySQL ну и для украшательств JS, JQuery. Как мне кажется — вполне хватает этого набора.
Притом у меня кроссплатформенная игра: есть версия для КП и есть для мобильных устройств.
Если есть вопросы — задавайте.
Спасибо за ответ. Для начала все необходимое выяснил. В дальнейшем могут возникнуть вопросы конечно. Как говорится «Лучше делать все поэтапно». Много информации сразу мне лишь хуже сделает. Если что, я обращусь к вам за помощью. Еще раз спасибо.