使用Redux-observable在React Native中正确处理websocket连接

时间:2019-06-01 16:03:31

标签: react-native redux websocket rxjs redux-observable

我正在开发一个React Native应用程序,其中我使用redux-observable作为redux中间件来管理应用程序状态。我有一个基本上通过这种方式设置的websocket连接:

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),
        )));
}

我正在使用可观察到的Redux史诗处理websocketClosed动作:

const reopenWebsocket: Epic = (action$) =>
    action$.pipe(
        ofType(WEBSOCKET_CLOSED),
        tap(websocket.connect),
        ignoreElements(),
    );

除服务器由于Websocket的请求不断而导致服务器不断中断外,此方法工作正常。

我想如果一个websocket已经打开时曾经调用过connect,那么旧的websocket将被替换 因此会触发旧的websocket的关闭事件,我猜这会导致websocket.connect,进而触发新的websocket的关闭事件。

我不确定我可以做些什么来更好地处理应用程序中与Websocket的连接,因此服务器不会收到大量似乎可以避免的请求。

预先感谢您对此的任何建议/解决方案。

0 个答案:

没有答案