Websocket - оптимально.
Но можно взять и LongPolling-решение:
https://pastebin.com/af8hF88Jно прочитал что при такой реализации очень большая нагрузка на сервер и на базу.
добавляем состояние в общий кеш (на сервере) и при запросе - берём оттуда. Обновляем кеш (обращаемся снова к базе и т.д.) через определённое время (кол-во запросов тут роли не играет).
Также, выключайте таймер авто-обновления на клиенте, если вкладка не активна или долго нет событий от UI: не скроллят, "мышь" долго не двигается, нет ввода с клавиатуры и т.д. (т.е., режим screen-saver'а фактически нужно сделать)
Возобновляйте авто-обновление при появлении активности.