Я работаю над приложением React Native, в котором я использую redux-observable
в качестве промежуточного программного обеспечения redux
для управления состоянием приложения.У меня есть подключение к веб-сокету, которое в основном настроено следующим образом:
let websocket: WebSocket;
export function connect() {
websocket = new WebSocket("wss://test.foo.com/abc"));
websocket.addEventListener("open", () => getStore().dispatch(websocketOpen()));
websocket.addEventListener("close", () => getStore().dispatch(websocketClosed()));
websocket.addEventListener("error", () => getStore().dispatch(websocketClosed()));
websocket.addEventListener("message",
(message: Event & {data: string}) => getStore().dispatch(websocketMessage(
JSON.parse(message.data),
)));
}
Я обрабатываю действие websocketClosed
с эпоксидно-наблюдаемой эпопеей:
const reopenWebsocket: Epic = (action$) =>
action$.pipe(
ofType(WEBSOCKET_CLOSED),
tap(websocket.connect),
ignoreElements(),
);
Это прекрасно работает, за исключением того, чтосервер постоянно выходит из строя из-за большого количества запросов веб-сокета.
Я полагаю, что если connect
когда-либо вызывается, когда веб-сокет уже открыт, старый веб-сокет заменяется, так что запускается событие закрытия старого веб-сокета,Я предполагаю, что в результате получается websocket.connect
, который, в свою очередь, запускает событие закрытия нового websocket.
Я не уверен, что я мог бы сделать больше, чтобы лучше обрабатывать соединение с websocket в приложении,таким образом, на сервер не поступают многочисленные запросы, которые можно избежать
Заранее спасибо за любые предложения / решения этого.