Уведомления от React-приложения через шину сообщений с Long Polling

Всем привет,

Сейчас я создаю фронтенд на React для headless-сервера Discourse.

Я занимаюсь реализацией счетчика уведомлений, похожего на тот, что отображается над аватаром пользователя здесь. Мне бы хотелось обновлять его почти в реальном времени с помощью long polling через message_bus в Discourse.

Я видел файл message-bus.js, но он очень громоздкий и устарел для современных приложений. Мне не хочется подключать jQuery и глобальный объект, когда мы должны делать это в рамках React-приложения.

Также я заметил в /initializers/subscribe-user-notifications.js.es6, что мы подписываемся на /notification/userid, но не могу найти документацию по доступным каналам для подписки или о том, какие ответы возвращаются.

Мне нужна помощь в том, как правильно реализовать подписку на message bus в современном JavaScript-приложении.

Спасибо! :+1:

Discourse и есть современное JavaScript-приложение :stuck_out_tongue:

Лучший способ — использовать библиотеку message-bus. В настоящее время она зависит от JQuery, но если вы захотите отправить pull request для удаления этой зависимости, я уверен, что это будет рассмотрено.

Messagebus предназначен только для использования внутри Discourse, это не совсем «публичный» API. Лучшим источником информации будут файлы JavaScript в коде, которые вы уже нашли :+1:

Небольшая правка :slight_smile:

MessageBus сначала попытается использовать jQuery, а затем перейдёт к версии на основе обычного XMLHttpRequest, которая содержится в файле message-bus-ajax.js. Файл message-bas-ajax.js должен быть загружен после message-bus.js, чтобы он использовался. Вы можете переопределить эту опцию с помощью функции, реализующей AJAX-запрос другим способом.

Спасибо @david, @sam, я не хотел намекать на то, что Discourse не является современным приложением — это очевидно. Сначала я наткнулся на message-bus.js и запутался, действительно ли это лучшая практика. Всё работает как надо, так что проблем нет.

Спасибо!

Ядро Discourse использует точно тот же файл, это правильный файл ™