Я всегда советую сначала попробовать самое простое решение в таких случаях.
А именно, есть проект Mercure Hub
https://mercure.rocks/docs/getting-started
Это сервис, устанавливаемый куда-то к себе на сервер, который умеет принимать обычный http запрос откуда-то с бэкенда или из другого места, данные из которого сразу перенаправлять подключенным к нему браузерам через SSE (Server Sent Events). Подключиться к нему из JavaScript через EventSource - это три строчки кода.
Вот небольшое знакомство с этим:
https://youtu.be/DzHvscVacj0?si=BzdhFA4q0rqUU7D5
https://youtu.be/kYNC47V7R_0?si=VCn1AEsqIa5AFddU
Ну и далее на сервере настраиваем cron, чтобы он каждый час запускал какой-то скрипт, который и будет осуществлять этот самый http-запрос с нужными данными в Mercure Hub, а тот его отправит в браузеры клиентов.