SocketPush - универсальные оповещения в любом браузере при открытой вкладке
Мы обнаружили, что ряд браузеров вообще не имеет в своём арсенале встроенный GCM-сервис. Среди них, к примеру, Опера, Вивальди, Firefox. В Safari есть APNS, но мы реализуем работу через него чуть позже.
Также недавно был яркий пример необходимости этой функции — один из пользователей пожаловался, что у него на работе не работают пуши: ни веб, ни через дополнение. Все дело в том, что у него на работе заблокированы все лишние порты. В нашем случае, сокет работает через проксирующий nginx на 443 порту и не блокируется фильтрами.
Прежде всего это удобный метод включить уведомления «на время», а потом выключить их закрытием вкладки. В отличии от других способов, данный метод не работает при закрытой вкладке или окне браузера.
Также это удобный метод обхода блокировок, не везде открыты порты, а иногда бывает и вообще GCM глючит, теперь мы имеем свой Push-сервер!
Как включить?
Жмете на знак ? сверху справа
И появляется справка, там жмете внизу - активировать устройство.
Вам сразу придет запрос на доступ к оповещениям.
ВСЕ! Этот метод будет работать на Chrome, всех браузерах основанных на Chrome, Safari, Firefox, Opera и т.д. Не работает на IE и EDGE - похоже MS вообще решили Notification API туда не вставлять. Но эта проблема решаема - мы потом будем делать приложение под Windows.
Как это работает?
За основу взята статья — Делаем вебсокеты на PHP с нуля
Я сделал мастер, который отслеживает все запросы к сокету, и воркер, который слушает redis-подписку для приёма команд на отправку оповещений, добавления или удаления пользователя.
Причем мастер слушает общий сокет с воркером, а воркер в этот сокет только пишет, когда нужно отправить оповещение. В свою очередь мастер слушает также сокеты подключенных пользователей и сокет для соединения.
Это позволяет в 2х процессах проверять и сокеты, новые уведомления и общаться между двумя процессами без каких-либо блокировок.
При этом передаются не сами оповещения, а лишь запрос на проверку. А сам клиент уже делает проверку.
Если в течении часа не было передано данных - соединение рвется, клиент снова присоединяется и делает проверку.
Также если у клиента включено устройство в профиле - сокет будет подниматься при открытии вкладки, при отключении устройства в профиле - сокет выключается также.Все просто.
Где будет применяться?
- Временный метод получения уведомлений
- Получение уведомлений на неподдерживаемых браузерах
- Различные плагины для других браузеров, в первую очередь, сделаем плагин для FF
- Стационарный клиент для компьютеров
При помощи этого метода мы получаем охват практически 100% десктопных браузеров!
Мобильные платформы, не поддерживают notification api, но их будем охватывать приложениями.
Этот метод удобен прежде всего тем, что уведомления можно получать с множества ресурсов - открыв всего одну вкладку браузера, независимо от вашего браузера.