У меня есть концентратор SignalR, который я запускаю локально из службы Windows.Мое приложение React + Redux также работает локально и подключается к концентратору, и в настоящее время я использую его только для получения сообщений с сервера.
SignalR.js:
import { HUB_NAME, HUB_URL } from '../Constants/SignalRConstants';
import { setStarted, setStopped } from '../Actions/StartStopActions';
const $ = window.$;
export const signalRStart = (store, callback) => {
let hub = $.connection[HUB_NAME];
hub.client.statusChanged = status => {
store.dispatch(status === 'Start' ? setStarted() : setStopped());
};
$.connection.hub.url = HUB_URL;
$.connection.hub.start(() => callback());
$.connection.hub.disconnected(() => {
window.alert('signalr disconnected');
if ($.connection.hub.lastError) {
alert('Disconnected. Reason: ' + $.connection.hub.lastError.message);
}
signalRStart(store, callback);
});
};
store.js:
import { createStore, compose } from 'redux';
import { Middleware, SignalR } from 'app-shared';
import rootReducer from '../Reducers/rootReducer';
const savedState = sessionStorage.store ? JSON.parse(sessionStorage.store) : {};
const store = createStore(rootReducer, savedState, compose(Middleware.customMiddleware));
SignalR.signalRStart(store, () => {});
store.subscribe(() => {
sessionStorage.store = JSON.stringify(store.getState());
});
export default store;
Работает некоторое время, но в конечном итоге отключается и остается отключенным.Я не думаю, что концентратор является проблемой, так как другие клиенты не испытывают проблем с тем, чтобы оставаться на связи / автоматически переподключаться.Я предполагаю, что в моей реализации есть какой-то недостаток, но я не вижу ничего явно неправильного.Я добавил несколько предупреждений для мониторинга, когда он отключается.Похоже, что нет ошибок.