Как внедрить систему уведомлений для обновлений в реальном времени? - PullRequest
0 голосов
/ 05 мая 2019

Я хочу внедрить систему уведомлений, как это делает Facebook для приложения Angular 7.В настоящее время я использую nodejs ad my backend и socket io для подключения через сокет.Я понимаю принцип работы сокетов, событий, наблюдаемых ... но я не могу понять, как создать сокет для каждого пользователя для получения уведомлений.

Я думал о создании канала под названием 'уведомления, а затем подписать всех зарегистрированных пользователей на этот канал.Когда пользователь делает что-либо, что вызывает событие, требующее, чтобы приложение создало уведомление, я буду транслировать уведомление всем пользователям и отображать его только в том случае, если вошедший в систему пользователь находится внутри массива приемников нового объекта уведомления. ОДНАКО Я думаю, что это очень плохой подход, так как все пользователи будут слушать это событие, и только очень небольшое количество из них будет отображать его.Кажется, что я трачу много ресурсов с этим подходом.Есть ли правильный способ справиться с этим или мой подход используется такими компаниями, как Facebook и Instagram

1 Ответ

1 голос
/ 17 мая 2019

С помощью WebSockets можно установить полный дуплекс и постоянное соединение между клиентом и сервером. Соединение остается открытым до тех пор, пока приложение работает (т. Е. Оно является постоянным), и поскольку оно является полнодуплексным, возможна двусторонняя одновременная связь, т.е. теперь сервер способен инициировать связь и «передавать» некоторые данные в клиент, когда новые данные (которые интересуют клиента) становятся доступными.

Протокол WebSockets с отслеживанием состояния и позволяет реализовать шаблон обмена сообщениями «Публикация-подписка (или публикация / подписка)» (как функциональность поверх базового транспорта), который является основной концепцией, используемой в технологиях реального времени, где вы Вы можете получать новые обновления в форме push-сообщений на сервере без необходимости повторного запроса (обновления страницы) клиентом, как вы указали.

Тем не менее, я понимаю, почему вы не понимаете, как установить WebSocket с несколькими клиентами. Идея состоит в том, чтобы иметь центральный объект (в идеале, архитектуру распределенных систем), который поддерживает соединения со всеми клиентами и служит в качестве шины сообщений для выполнения маршрутизации, необходимой для публикации / подписки, в режиме реального времени.

Это очень сложно и сложно, и необходимость иметь дело с масштабированием на основе спайков только увеличивает сложность. Как правило, вместо создания такой архитектуры с нуля, вы должны использовать сеть потоков данных (DSN), которая является абстракцией архитектуры распределенных систем, о которой я упоминал, в виде службы, к которой ваши клиенты могут подключиться для публикации или публикации. подписка на данные по различным каналам.

Я интенсивно работал с Сетью потоков данных Ably , которая делает это очень хорошо, а также предлагает такие вещи, как адаптеры протоколов, чтобы иметь возможность подключать протоколы, отличные от WebSockets (такие как MQTT), а также позволяет вам подключитесь к любой сторонней службе, такой как AWS Lambda, чтобы вызывать функцию без сервера, возможно, в режиме реального времени. это довольно полезно и очень легко начать с моего опыта.

Вот видео из презентации, которую я сделал о WebSockets и о том, как вы можете создать прямую трансляцию для ваших данных.

Надеюсь, это поможет!

...