На стороне сервера существует надежный способ определить,
клиент на самом деле там, чтобы получать запросы - другими словами, что
у кого-то есть открытая страница, и она готова к приему отправленных данных?
Я думаю, что надежный способ - просто ждать, пока клиент запросит уведомления с сервера.
У запроса клиента должен быть уникальный идентификатор клиента, который сервер хранит для тех клиентов, которые успешно подписались. Если идентификатор есть, дайте ему то, что он хочет.
Как вы справляетесь с тем фактом, что клиенты могут быть в автономном режиме, но должны
получить данные, которые они пропустили при входе в систему?
Как долго клиент будет оставаться в автономном режиме и как часто создаются новые уведомления? Если клиент слишком долго оставался в автономном режиме, то к тому времени он получит много уведомлений.
Или, может быть, вы имеете в виду, что клиент подписывается, а затем теряет свое интернет-соединение. Тогда каждому клиенту потребуется очередь, в которой остаются уведомления, прежде чем клиент запросит их. Пока клиент остается в автономном режиме, сообщения остаются в очереди. Вероятно, вам потребуется время затухания для очистки сообщений в очереди, если клиент слишком долго остается в автономном режиме, поэтому объем хранилища не увеличивается (при условии, что вы будете использовать redis или что-то подобное).