Чем больше я читаю на эту тему, мне кажется, что я спускаюсь в кроличью нору. Это новое торговое приложение, которое получает данные в реальном времени через веб-сокеты, основанное на парадигме запрос-ответ. Существует три отдельных SPA, в которых, помимо начальной загрузки, каждое действие пользователя инициирует вызов хранилища данных с новым MDXQuery. Поэтому, в свою очередь, мне нужно было бы сделать новые подписки на componentDidMount (), а также на соответствующих ActionCreators. Я хотел бы упростить код, чтобы избежать дублирования кода и избыточности.
Приведенный ниже код помогает установить новый канал подписки для потоковой передачи ответа через веб-сокет (в отличие от большинства кодов sockets.io, где он идет с назначенным открытием, закрытием, отправкой)
this.subscription = bus.channel(PATH, { mode: bus.wsModes.PULL }).createListener(this.onResponse.bind(this));
this.subscription.subscribe(MDXQuery);
Если я прочитал документацию REDUX о том, где я должен разместить код веб-сокета? Упоминается создание пользовательского промежуточного программного обеспечения.
ССЫЛКА: https://redux.js.org/faq/codestructure#where-should-websockets-and-other-persistent-connections-live
Но я не очень уверен, как я мог бы использовать этот пользовательский код веб-сокета для создания собственного промежуточного программного обеспечения или на уровне компонентов, чтобы имитировать эту стратегию.
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);
}
}
}
Любые входные данные действительно помогут !!