Правильная обработка соединения с веб-сокетом в React Native с соблюдением правил редукции - PullRequest
1 голос
/ 01 июня 2019

Я работаю над приложением 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 в приложении,таким образом, на сервер не поступают многочисленные запросы, которые можно избежать

Заранее спасибо за любые предложения / решения этого.

...