Функция, которую вы описываете, похожа на технику, известную как push-сервер. То, что вы просите сделать, - это очень сложная вещь для веб-приложения (особенно для PHP, которое основано на идее обработки запроса и завершения сценария).
HTML5 представляет такие технологии, как веб-сокеты для поддержания постоянного подключения к серверу, вы можете посмотреть на веб-сокеты как на решение, но это совершенно новая технология, и я не думаю, что спецификация еще даже доработана, поэтому будет реализован только в самых последних версиях браузеров, если вообще будет.
Вы уже упоминали опрос AJAX (управляемый setInterval), но вы также заметили, что это проблематично. Конечно, вы правы, локальные данные могут устареть в промежутке между опросами, и вы будете генерировать большой трафик между сервером и любыми открытыми клиентами.
Альтернативой является так называемый "длинный опрос". Идея состоит в том, что клиент начинает сеанс AJAX с сервером. На сервере скрипт, вызываемый клиентом, в основном просто сидит там и ждет, когда что-то изменится. Когда это происходит, сервер уведомляет клиента, отправляя JSON / XML / любой другой ответ и закрывая сеанс AJAX. Когда клиент получает ответ, он обрабатывает его и инициирует новое подключение AJAX, чтобы дождаться ответа другого сервера.
Этот подход почти мгновенный, потому что данные передаются клиенту, как только они становятся доступными. Однако это также означает много открытых соединений с сервером, и это может привести к большой нагрузке на сервер. Кроме того, PHP-скрипты на самом деле не предназначены для долгого времени работы или сна из-за модели «запрос-ответ», на которой построен язык. Возможно, но, вероятно, не рекомендуется следовать этому подходу.
Как реализовать базовый «длинный опрос»? содержит несколько примеров техники длительного опроса.
Удачи!