使用 Socket.io 作为带有 Flux 的 Pub-Sub 系统
Using Socket.io as Pub-Sub System with Flux
我正在尝试在更新数据库时通知客户,以便前端可以向用户呈现正确的状态。我想要的功能是让套接字发送一条消息,该消息将触发应用程序对更新状态发出获取请求。套接字侦听器应该在前端的什么位置?
1)Api-实用程序
2)相关店铺
3)Server-Action Creator
目前,Api-Utils 完成所有从服务器实际获取数据的工作,当检索到数据并通过调度程序通知商店时,会调用 Server-Action-Creator。存储只是保存我们的数据,将其提供给组件,并监听调度程序何时有新的有效负载。
TL;DR;您的客户端套接字侦听器应该是 'dumb' 个侦听器,他们的唯一任务是将接收到的数据传递给操作。使用该数据做什么的逻辑应该在操作中。
套接字侦听器应该在变化之外,并在从服务器接收到数据事件时执行操作。
例如,这是我的client.jsx文件(使用部分伪代码编辑,为了便于阅读),使用Fluxible'srehydrate
函数注入建立状态到我的客户端应用程序):
import Socket from 'socket.io-client';
import BaseClient from './utils/baseClient';
// Fluxible
import {createElementWithContext} from 'fluxible-addons-react';
// Components
import Loading from './components/loadingComponent.jsx';
class Client extends BaseClient {
sockets() {
this.socket = Socket();
this.socket.on('someEvent', (data)=>{
this.context.executeAction('nameOfSomeAction', data);
});
}
constructor(component) {
super(component);
this.app.rehydrate(window.App, (e, ctx)=> {
this.context = ctx;
this.sockets();
React.render(createElementWithContext(ctx), document.getElementById('main'));
});
}
}
new Client(Loading);
当从服务器接收到数据时,它会被发送到操作,而操作又决定如何处理该数据(调用第三方 API、分派到存储等)。
我正在尝试在更新数据库时通知客户,以便前端可以向用户呈现正确的状态。我想要的功能是让套接字发送一条消息,该消息将触发应用程序对更新状态发出获取请求。套接字侦听器应该在前端的什么位置?
1)Api-实用程序 2)相关店铺 3)Server-Action Creator
目前,Api-Utils 完成所有从服务器实际获取数据的工作,当检索到数据并通过调度程序通知商店时,会调用 Server-Action-Creator。存储只是保存我们的数据,将其提供给组件,并监听调度程序何时有新的有效负载。
TL;DR;您的客户端套接字侦听器应该是 'dumb' 个侦听器,他们的唯一任务是将接收到的数据传递给操作。使用该数据做什么的逻辑应该在操作中。
套接字侦听器应该在变化之外,并在从服务器接收到数据事件时执行操作。
例如,这是我的client.jsx文件(使用部分伪代码编辑,为了便于阅读),使用Fluxible'srehydrate
函数注入建立状态到我的客户端应用程序):
import Socket from 'socket.io-client';
import BaseClient from './utils/baseClient';
// Fluxible
import {createElementWithContext} from 'fluxible-addons-react';
// Components
import Loading from './components/loadingComponent.jsx';
class Client extends BaseClient {
sockets() {
this.socket = Socket();
this.socket.on('someEvent', (data)=>{
this.context.executeAction('nameOfSomeAction', data);
});
}
constructor(component) {
super(component);
this.app.rehydrate(window.App, (e, ctx)=> {
this.context = ctx;
this.sockets();
React.render(createElementWithContext(ctx), document.getElementById('main'));
});
}
}
new Client(Loading);
当从服务器接收到数据时,它会被发送到操作,而操作又决定如何处理该数据(调用第三方 API、分派到存储等)。