Как использовать signalR с Redux-наблюдаемым?

Я создал приложение Angular SPA. Я использую ядро ​​ASP.net на стороне сервера, а состояние на стороне клиента обрабатывается с помощью redux-observable с помощью action-reducer-epics.

Структура такая: я настроил хранилище, корневые эпики и корневой редуктор, а затем каждый компонент имеет свои собственные эпические файлы, редукторы и служебные файлы.

Я хочу разместить signalR в redux-observable, но не могу его правильно интегрировать.


person Sagar K    schedule 16.08.2018    source источник
comment
Некоторый код и правильное описание ваших проблем могут определенно помочь.   -  person Adriano Repetti    schedule 17.08.2018
comment
конечно, я тоже опубликую код   -  person Sagar K    schedule 20.08.2018


Ответы (2)


Сначала сделайте свои хаб-события наблюдаемыми. Я адаптировал этот код для работы. против ASP.NET Core SignalR.

Затем создайте эпос для запуска хаба (я использую машинописный текст), отправьте это действие где-нибудь при запуске.

const startNotificationHubEpic: Epic<RootAction, RootAction, RootState, Services> = (action$, store, { notificationHub }) => {
    return action$.pipe(
       filter(isActionOf(startNotificationHub.request)),
       switchMap(action => 
            from(notificationHub.start()).pipe(
                   map(() => startNotificationHub.success()),
                   catchError(err => of(startNotificationHub.failure(err)))
        )));
}

Наконец, используйте действие startNotificationHub.success, чтобы начать прослушивание потоков событий rsjx на хабе для каждого интересующего вас события.

const listenForMessageEpic: Epic<RootAction, RootAction, RootState, Services> = (action$, store, { notificationHub }) => {
    return action$.pipe(
        filter(isActionOf(startNotificationHub.success)),            
        switchMap(act => 
            notificationHub.on("Message", (messag: string) => ({message})).pipe(
                map(notif => onMessage(notif))
        )));
}

Действие onMessage, в свою очередь, может использоваться другим эпиком или использоваться в редукторе для передачи данных уведомления компоненту.

person Nic Strong    schedule 07.09.2018

Я сделал крошечную библиотеку для обработки событий SignalR (.NET Core) в реальном времени с использованием redux, rxjs и redux-observable: redux-observable-signalr-core. Он реализует автоматическое переподключение без дополнительной настройки. Он довольно гибкий, поэтому вы можете использовать его практически для любого сценария или просто взглянуть на исходный код, чтобы создать собственное решение.

person Denys Kashkovskyi    schedule 04.08.2019
comment
эта библиотека не поддерживается. нет документов, и я получаю ошибки при попытке сборки. не кажется стоящим использования. - person selanac82; 13.07.2020