Должен ли я породить новый процесс узла для игровой комнаты? - PullRequest
0 голосов
/ 04 мая 2018

Я делаю карточную игру на node.js и думаю о том, чтобы создать новый процесс для каждой игровой комнаты. Я планирую сделать соединение с помощью fork (). После некоторых исследований я обнаружил, что это не лучший подход, потому что у меня должен быть процесс узла на физическое ядро. Но разве мой подход лучше для масштабируемости и модульности? Если скажем, игровая комната падает, она не сломает остальных. Может кто-нибудь помочь мне немного лучше проанализировать ситуацию? Я планирую запустить игру на инстансах aws EC2 и рассчитан на максимум 1500 одновременных пользователей, играя в комнатах по 4 человека и общаясь с сообщениями socket.io.

1 Ответ

0 голосов
/ 04 мая 2018

Один экземпляр Node может обрабатывать этот тип нагрузки, поскольку одной из сильных сторон NodeJS является связь в реальном времени и множество одновременных подключений.

Что касается сбоев, вам нужно планировать их. Несколько начальных советов:

  • Ловите ошибки и регистрируйте сообщения об ошибках, чтобы ваш экземпляр Node полностью не вышел из строя. Часто ошибки могут помешать правильному завершению этой конкретной цепочки функций, но не остановят ваш процесс.
  • Сохраните свое игровое состояние в другой службе, например в базе данных, чтобы вещи (например, соединения) могли восстановиться. Пример использования: «Пользователь теряет соединение и снова входит в систему, он повторно подключается к комнате и может видеть игру в ее текущем состоянии»
  • Вы можете автоматически восстановить процесс Node, запустив что-то вроде forever или PM2 (есть другие). Они будут отслеживать и перезапускать при сбое процесса (хотя это не должно происходить слишком часто).
...