【发布时间】:2018-09-10 15:16:56
【问题描述】:
我对这个主题的了解越多,就好像掉进了兔子洞。这是一个新的交易应用程序,它通过基于请求-响应范例的网络套接字接收实时数据。存在三个单独的 SPA,其中除了初始加载之外,每个用户操作都会触发对具有新 MDXQuery 的数据存储的调用。所以反过来我需要在 componentDidMount() 以及相应的 ActionCreators 上进行新的订阅。我想简化代码以避免重复代码和冗余。
下面的代码有助于建立一个新的订阅通道,以通过 web-socket 流式传输响应。(与大多数带有指定打开、关闭、发送的 sockets.io 代码不同)
this.subscription = bus.channel(PATH, { mode: bus.wsModes.PULL }).createListener(this.onResponse.bind(this));
this.subscription.subscribe(MDXQuery);
如果我阅读了 REDUX 文档,我应该将 Web 套接字代码放在哪里?它提到创建自定义中间件。 链接:https://redux.js.org/faq/codestructure#where-should-websockets-and-other-persistent-connections-live
但我不太确定如何使用此自定义 Web 套接字代码来构建我自己的中间件或在组件级别进行操作将有助于模仿此策略。
const createMySocketMiddleware = (url) => {
return storeAPI => {
let socket = createMyWebsocket(url);
socket.on("message", (message) => {
storeAPI.dispatch({
type : "SOCKET_MESSAGE_RECEIVED",
payload : message
});
});
return next => action => {
if(action.type == "SEND_WEBSOCKET_MESSAGE") {
socket.send(action.payload);
return;
}
return next(action);
}
}
}
任何设计输入都会有帮助!
【问题讨论】:
标签: reactjs websocket redux middleware subscription