Как я должен архитекторизировать свой сервер DB & API для многопользовательской игры на базе врата на плате для iPhone? (думая о Nodejs, Mongo, Couch и т. Д.)

StackOverflow https://stackoverflow.com/questions/3605115

Вопрос

Я работаю над настольной игрой на основании на iPhone и в конце концов Android. Я использую Titanium Appleerator для его развития. Мой многопользовательский дизайн похож на слова с друзьями. Пользователи по очереди, когда готовы, а затем игровая доска оппонента обновляется соответственно.

Одним из моих потребностей заключается в том, чтобы иметь API обмена сообщениями, который позволяет устройствам 2 игроков обновлять друг друга в статусе игровой доски после хода. Мышление о том, чтобы сделать это с JSON и держать объект JSON на устройстве, который содержит местоположение всех игровых досок в любой момент времени. Это объект, который нужно будет обновлять на локальном устройстве, а затем отправить изменение устройства противника после выполнения движения.

Я сделал API в прошлом для мобильных платформ и сделать это, я использовал PHP с MySQL и отправил JSON назад и вперед между сервером API и мобильным устройством. Работает просто DANDY для низких одновременных пользователей и, как правило, немассивные приложения. Вот надеяться, что этот станет массивным;)

Так что теперь, вместо генерального сервера HTTPD и тому подобное, я начинаю думать о постоянных розетках, и если они нужны или нет для моей новой игры. Я также думаю, что это может быть умным отказаться от большого стека лампы, а также для масштабируемости и, возможно, простота развития, чтобы наклониться к потоку данных чего-то вроде Mongo / Couch -> Node.js -> iPhone. Я буду честен, это будет моя первая наряда в не SQL DB и Node.js.

Заинтересованы в том, чтобы услышать, что другие требуют и опыт на это, больше вариантов / мыслей, и я думаю об этом правильно, или просто создавая головные боли для себя.

Это было полезно?

Решение

Прежде всего, Nodejs является крутой для написания обратных прокси TCP в базы данных NoSQL. Вы можете позволить всем стандартным командам проходить через, но изменять / расширить свои API со своей собственной магией, например, изготовление Mongodb, говорят HTTP или CouchDB, говорю по двоинному протоколу по сокетам.

Когда дело доходит до выбора решения NoSQL для хранения настольных игровых произведений и мониторинга для движений игрока, я думаю, что либо Redis, и CouchDB являются лучшими кандидатами.

  1. Couchdb. Это быстро, надежно и может обрабатывать много одновременных HTTP-соединений. Это, вероятно, лучший вариант, потому что в отличие от Redis, он может транслировать сообщение при изменении документа. То непрерывные изменения API. Заставляет Super Simple для вас иметь монитор приложения каждого игрока для изменений в их доске. Запрос может выглядеть так:

    curl "$HOST/dbname/_changes?filter=app/gameboard&feed=continuous&gameid=38934&heartbeat=1000

    Каждый клиент получит объект JSON в соответствии с ответом в любое время, в любое время заменяется соответствующий документ. (И пустой новой строки каждые 1000 мс как вида хранения.)

  2. Редис. Он использует простой протокол на основе линии (например, memcached ++), чтобы разговаривать через сокет и позволяет вам хранить списки, наборы, хэши с произвольными - даже двоичными значениями. Это очень быстро, потому что все происходит в памяти, но сохраняется на диске асинхронно. Но большая часть всего вы должны оценить это, потому что у него уже есть Пабсуб Уведомления, запеченные в. Обратите внимание, что вам придется явно публиковать уведомления о перемещении по каналу, которые имеют ресурсы игроков, потому что Redis не будет автоматически публиковать при изменении ключа / значения.

Поскольку Mongodb не имеет механизма для наблюдения за изменениями, как они - случаются или делают Pubsub, я не считаю его хорошим вариантом, хотя с дополнительными усилиями вы могли бы сделать это работать.

Итак, вы можете сделать вывод, вы можете заменить «большой стек лампы» с одним CouchDB, один из CouchDB, один из CUCHDB, Oneis Oneis или из них, который помещен за приложением узла для фильтрации / расширения API, они уже предоставляют в то, что соответствует вашей игре.

Удачи!

Другие советы

Я только что начал изучать Монго, и это не трудно учиться. Вещи, такие как индексы и объясняют там и работают то же самое. Когда дело доходит до архитектуры, вы хотите думать, что противоположность SQL; Вместо того, чтобы нуждаться в хорошей причине, чтобы де-нормализовать, вам нужно придумать хорошую причину для нормализации. Ребята в 10GEN (которые делают Mongo) скажут, что мышление иерархика является более естественным образом думать о вещах, которые я бы согласился с (ориентировочно). Искатели чувствуют себя своего рода SQL-ISH, хотя вы все равно будете использовать Map-Unize для запросов агрегации.

От того, что я понимаю о диване, большая разница в том, что на вещью распределенной репликации существует сильный фокус. Mongo сосредотачивается больше на производительности над массовым количеством данных (хотя у них тоже есть автозадача и отличная история масштабирования). Я бы пошел Mongo, если только вы на самом деле не собираетесь использовать распределенные аспекты дивана.

Узел должен быть самая крутая вещь, и я думаю, что это будет отличное приложение для него. У меня с ним нулевой опыт, но от того, что я прочитал, он отлично подходит для нагрузок небольших запросов, и рассветает удивительно. IDiomatomy JavaScript довольно хорошо поддается всей модели в совокупности, а с v8 она работает просто непристойно быстро.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top