многоядерный nodejs игровой сервер - PullRequest
0 голосов
/ 12 февраля 2020

Я разрабатываю серверную карточную игру с nodejs, я использую socket.io и Redis в качестве адаптера, чтобы разные экземпляры могли получить доступ ко всем сокетам.

Я планирую сохранить матч состояния могут быть от 5 до 10 КБ в Redis, и хотя игроки в матче могут быть подключены к разным экземплярам, ​​когда каждый из них выполняет действие, их экземпляр обновит состояние соответствия в Redis.

быть в порядке, но я чувствую, что у него есть некоторые проблемы, например, в случае любого cra sh или перезапусков, мне нужно получить все совпадения и выполнить с ними некоторые действия, но как заставить каждый экземпляр обрабатывать часть совпадений? Кроме того, я включу таймер для следующего игрока, когда он может быть подключен к другому экземпляру, поэтому, когда они играют свою очередь, он будет обрабатывать в другом экземпляре и не сможет остановить таймер, потому что таймер был запущен в другом экземпляре!

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

любой совет или предложение быть оцененным

1 Ответ

0 голосов
/ 20 февраля 2020

Я не уверен, что буду следовать точной проблеме здесь, но вы сможете создать высокодоступную систему, которая позволит вам не перезапускаться с нуля.

  1. Используйте высокодоступный экземпляр Redis, например, с использованием Redis Sentinel или экземпляров Redis Cloud, которые предоставляют HA

  2. Используя Node JS Socket.io, вы также можете развернуть его на многих сервер (поддерживаемый Redis), посмотрите на https://socket.io/docs/using-multiple-nodes/#Using - Node-JS -Cluster

Это должно позволить вам иметь «всегда» архитектура, которая может масштабироваться.

...