ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
22 декабря
1037587
Связанные сообщения
IotWeb Application
Ищу решение IoT, сухой контакт, около 2-х срабатываний в неделю. Интересует покрытие в масштабах города, например, Новороссийска...2021-03-11
Я уже высказывал своё мнение о уеб-дизайнерах и используемых ими "фреймворках". Оно крайне негативное. Практически веб-технологи...2020-05-22
А зачем тебе вообще нужен асинхронный запрос? Потому, что как часто бывают с ардуинщиками -- они услышали что-то одно, зацепилис...2020-04-16
Вообще lloyd наталкивает на интересные мысли. Условный макропроцессор можно сделать комбинировав пункты 1 и 2. Т.е. мы пишем шаб...2020-04-16
Ну это как спор между ЯВУ с динамической типизацией и статической. Первые быстро стартуют, но не далеко летают, с ростом сложнос...2020-04-16
Не нужно устраивать PHP и мешать вермишель из перекрученных между собой стилей, javascript-кода и логической организации (HTML)....2020-04-16
Зачем тебе XML? Данные в javascript проще переносить в виде JSON. В который можно трансформировать на хосте чем-то вроде xsltpro...2020-04-16
[Книги по IoT]2019-04-02
[IoT] Справочный топик по серьезному IoT - принципиально новые технологии и методологии в этой сфере. Только справочник, ...2017-10-06
Идеология "умного дома". -> На мой достаточно консервативный взгляд, ничем, кроме как любовью к творчеству это обосновать нел...2014-11-14
fk0, легенда (18.09.2020 12:07, просмотров: 3164)
Веб-нотификации: Я думаю это интересная тема, и её нужно вынести в отдельный топик. Я так же прошу кого-то кто разбирается в теме накидать толковых ссылок (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

[ZX]