Заказ и фильтрация Server-Sent-Events в файле angular.js eventsource
У меня есть клиент в AngularJS, где я использую несколько SSE (Server-Sent-Events) в Java со стороны сервера (на сервере есть несколько конечных точек на разных веб-серверах). Ссылка на диаграмму
В настоящее время я регистрирую слушателя для каждого типа событий, исходящих из каждого SSE-соединения, например:
source.addEventListener('alpha', function(e) {
doSomething();
}, false);
Цель состоит в том, чтобы показать уведомление, основанное на этих событиях, и с этим у меня есть несколько вопросов:
- Как клиент может знать, изменилась ли информация в бэкэнд?
- Как организовать и фильтровать эти события? Например, получая одновременно несколько событий из нескольких подключений, как я могу управлять ими, чтобы показать клиенту конкретное уведомление о конкретном событии?
Примечание. Я говорю не только об организации события для каждого типа, но мне также нужно иметь в виду, если событие более важно, чем другое.
Пока я только думаю о получении всех событий и сохраняю их в списке, который я мог бы заказывать и фильтровать. Есть ли проблема, если одновременно запускаются два события SSE? Вы знаете пример этого?
- Это хорошая идея, чтобы сделать логику для организации событий на стороне клиента?
- Должен ли я создать базу данных для этих событий?
Спасибо,
1 ответ
Как организовать и фильтровать эти события?
, но я также должен иметь в виду, если событие более важно, чем другое.
Я бы предположил, что у вас одна или несколько очередей. Когда происходят события, они попадают в очередь. Как они обрабатываются, зависит от требований вашего подхода.
У вас может быть несколько очередей, каждая из которых представляет приоритет и помещает ваши события в нужные ведра. Более высокие очереди приоритетов сначала потребляются системой уведомлений.
У вас также может быть одна большая очередь с приоритетными событиями в позиции головы. Вы можете либо размещать события в очереди, либо повторно сортировать каждый раз, когда происходят события, или делать некоторую интеллектуальную логику, чтобы вводить события в положение, чтобы избежать повторной сортировки.
Можно ли сделать логику для организации событий на стороне клиента?
В зависимости от ваших требований. Но он добавляет некоторые накладные расходы, делая это в обоих местах.
Должен ли я создать базу данных для этих событий?
Когда появляется постоянное хранилище событий, я обычно думаю, что время простоя и на сервере. Но это зависит от ваших требований. Если ваши события могут быть отпущены, вам не нужно их упорствовать. Но если нет, вам нужно где-то их удержать.
Как клиент может знать, изменилась ли информация в бэкэнд?
Вы используете SSE. Просто отправьте сервер другому событию, информирующему вас об этом изменении. Возможно, вам потребуется обновить свою логику, чтобы обновлять события в очереди, а также вашу полезную нагрузку, чтобы указать, что эти события связаны.
Есть ли проблема, если одновременно запускаются два события SSE?
JavaScript является однопоточным. Даже если два события отправляются одновременно и одновременно поступают в ваш браузер, JavaScript будет выполнять только одно событие за раз.