В Node.js какие технологии хранения доступны для игр реального времени - PullRequest
0 голосов
/ 24 ноября 2011

Я планирую поэкспериментировать с разработкой игр в реальном времени с использованием html5 и node.js. Ранее я создавал игру, используя опрос для имитации обновлений в игре в реальном времени. Моя игра в реальном времени использует AJAX для синхронизации игры между несколькими клиентами. По сути, всякий раз, когда происходило изменение состояния игры, я обновлял поле last_updated в соответствующей строке базы данных. Всякий раз, когда клиент опрашивал сервер, он проверял наличие любых обновлений, произошедших с момента его последнего опроса, возвращая все соответствующие обновления (делая это путем сравнения времени предыдущего опроса с полями last_updated).

В моей новой версии игры, где я вместо этого использую node.js (и веб-сокеты), я бы хотел избежать такого механизма, когда мне приходится постоянно выполнять поиск в базе данных, чтобы найти, были ли обновления. Мне было интересно, существуют ли альтернативные методы хранения важной информации о состоянии игры без использования базы данных в этом случае.

Мне бы очень хотелось иметь возможность настраивать события для всех клиентов при изменении состояния игры, вместо того чтобы постоянно проверять изменения, поскольку это сэкономило бы большое количество обработки / запросов. Я действительно не знаю, можно ли отправить событие, запущенное на одном клиенте, другим клиентам, также подключенным к моему работающему серверу node.js. Я всегда использовал базу данных для такого рода вещей, но я действительно надеюсь, что есть и другие лучшие альтернативы?

Ура, Джош

Ответы [ 3 ]

4 голосов
/ 24 ноября 2011

Прежде всего вам нужно что-то вроде Socket.IO для обработки веб-сокетов (и длинных опросов и т. Д., Если WS недоступен).

После этого вам нужно Redis или ZeroMQ для масштабирования Socket.IO (под масштабированием я подразумеваю несколько процессов, даже несколько серверов). Для этого вы также можете использовать CouchDB _changes событие . (который может сообщить вам, когда произошла вставка / обновление)

Что касается механизма хранения, я предлагаю вам использовать MongoDB (действительно хорошо для записи, это то, что вам нужно) или комбинацию Redis (чтение из памяти) и CouchDB (для записи).

Все они имеют библиотеки Node.js, которые вы можете проверить на странице модулей https://github.com/joyent/node/wiki/modules или найти их на их сайтах (на сайтах dbs).

3 голосов
/ 24 ноября 2011

Вам нужна база данных, которая может выдвигать данные.

Примеры Redis и couch.

Вместо того, чтобы искать в базах данных изменения (медленные, как ад), вы позволяете базе данных сообщать«Эй, изменение произошло»

Затем вы просто передаете это изменение всем подключенным клиентам через socket.io.

1 голос
/ 24 ноября 2011

Он хочет хранения ... MongoDB был бы хорошим вариантом.Если нет требований к транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...