Веб-нотификации: Я думаю это интересная тема, и её нужно вынести в отдельный
топик. Я так же прошу кого-то кто разбирается в теме накидать
толковых ссылок (lloyd?) Итак, как работают нотификации в
браузере: 1) javascript может "спросить разрешения" у пользователя и "подписаться" на нотификации, тогда браузер даст ему некий набор данных который используется для посылки нотификации;
2) этот набор данных должен быть передан на сторону того, кто будет посылать нотификации (это может быть прямо IoT-устройство);
3) в день Д и час Ч с использовнанием указанного выше набора данных, куда в частности входит URL сервера принимающего нотификации для данного браузера (у каждого браузера свои сервера, у Chrome свой, у Mozilla свой...) посылается нотификация в зашифрованном виде (ключ в наборе данных выданном браузером), посылается на этот самый сервер обслуживающий браузер конкретного типа;
4) браузер постоянно находится в контакте с вышеуказанным сервером, и как только, так сразу получает нотификацию, расшифровывает, и запускает worker-скрипт предоставленный в пункте-1, этот скрипт получает данные и может с ними что-то сделать и, в частности, заставить браузер показать пользователю, мол есть нотификация, при клике на которую может загрузиться нужная страница.
Ключевым моментом тут является промежуточный сторонний (принадлежит авторам браузера) сервер, который хранит нотификацию и передаёт её в браузер. Он с одной стороны позволяет не иметь свой собственный сервер к которому будут коннектится все клиенты напрямую, с другой позволяет на стороне клиента иметь не десятки соединений с разными серверами, а одно единственное, что позволяет телефону работать от одной батарейки, а не целого чемодана.
Service worker мог бы тупо опрашивать сервер о появлении новых событий, но сейчас такой функционал (background sync) реализован только в Chrome и ест батарейку. Там ещё в планах интересный функционал geo fencing, но это дело будущего.
Важно не путать данный механизм стандартизированный w3 group с какими-то частными решениями им. Google для Android, которые появились раньше.
В описанном механизме отправки сообщений есть одна сложность: протокол отправки самой нотификации, он достаточно сложный, там используется шифрование. Поэтому часто используют готовую библитеку, которая, того хуже, может ещё использовать чей-то сторонний сервис и сервер для отправки через него. И здесь интересно бы получить возможность относительно лёгкой отправки нотификаций своими силами. Для IoT и отправки прямо с прибора, минуя всякие сервера. Если в приборе линукс, то есть решение на питоне (см. ниже). Если даже линукса нет, то может быть интересна библиотека на C, ссылка на которую дана ниже, но она обеспечивает только шифрование, а ещё собственно нужно составить сообщение и послать, и ещё нужна поддержка SSL -- вся коммуникация только через https. Для чего могут пригодится МbedTLS или PolarSSL.
Более-менее внятное описание:
https://developers.google.com/web/fundamentals/push-notifications
Стандарт:
https://www.w3.org/TR/push-api/
Демка (там видны детали, как оно внутри делается):
https://d3v.one/a-minimal-web-push-example/
Питоновский скрипт умеющий отправлять нотификации:
https://github.com/web-push-libs/pywebpush
Библиотека шифрующая сообщение на C:
https://github.com/web-push-libs/ecec
Что такое service workers:
https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API