Как наименее затратно мониторить в цикле наличие новой информации?
RabbitMq + Consumer на PHP
Поступил звонок -> Пуш сообщения в RabbitMq -> Свободный консьюмер обрабатывает и пушит уже в браузер по websocket
Легко масштабируется если нагрузка станет больше (просто добавить консьюмеров)
Но вообще нагрузка "каждые полсекунды" для базы - не нагрузка вовсе
> есть цикл в server sent events, он проверяет каждые 500мс 
Почему сами лезете  к апи ? Калбаки есть ?
> Ясно что не в БД, 
Нет файлы хуже . 
> считывать каждые полсекунды оттуда первую строку?
У вас фронт насилует бак каждые полсекунды аякс запросом ?Как я вижу все решение
используем WebPush https://fcm.googleapis.com/fcm/send
Виртуальной атс говорим урл для уведомлений. 
При его вызове, разбираем данные. Заносим в базу для статистики или для других целей. Шлем уведомление .
Обычно оно выскакивает через 250мс.
В общем гуглите. Примеров в сети достаточно.