Общий ответ: вебсокеты и асинхронные сообщения через pub/sub
В гугле искать по фразам "socket.io rabitmq" "php rabbitmq" "php websocket" "php pub/sub"
Вариант реализации с использованием PHP
На клиентском приложении:
socket.io + javascript
На сервере: socket.io + RabbitMQ + PHP
Чтобы следить за игровым процессом:
Скрипт
PHP будет посылать сообщения в очередь на RabbitMQsocket.io будет читать очередь RabbitMQ и пересылать в веб-сокеты
Клиентское приложение в браузере будет создавать постоянное соединение к сервером по протоколу веб-сокетов и читать из него всё, что пришлёт сервер socket.io. Всё, что присылается, нужно будет показывать в веб-интерфейсе.
Чтобы управлять игровым процессом
Из клиентской части веб-приложения нужно будет отправлять команды управления через AJAX или через то же соединение веб-сокет.
В случае "через AJAX" нужно будет создать серверное микро-приложение, которое будет принимать команды через AJAX и затем передавать в основной игровой процесс через RabbitMQ или иным способом.
В случае "через веб-сокет" серверная сторона socket.io должна будет отрабатывать полученные команды и передавать в основной игровой процесс через RabbitMQ или иным способом.
На сервере нужно будет периодически делать дамп состояния основного серверного игрового процесса и сохранять в какую-нибудь базу. Я бы предложил дамп хранить в формате JSON в базе NoSQL, например, Mongo, CouchDB, Redis.
При перезапуске основного серверного игрового процесса нужно будет восстанавливать состояние из этого дампа.
Игрокам нужно будет выполнять авторизацию. У нескольких игроков может быть один игровой мир или отдельный микро-мир на несколько пользователей или на отдельный сеанс игры (например, одна шахматная доска на двух игроков и несколько зрителей). Поэтому надо будет хранить данные о пользователях и мирах. Вот тут подойдёт SQL база, например, MySQL или PostgreSQL. Хотя и NoSQL тоже можно использовать.
Ну как то так.
Выглядит замысловато, а на деле реализуется очень просто.