NGXS-如何打包一个操作,使其可以远程调度



我最近在研究一个多用户应用程序的对等消息。为此,我萌生了将操作从一个客户端发送到另一个客户端的想法。

是否可以序列化操作?

source.connection.send(action); // the type is not in the data?
destination.connection.on("data", data => this.store.dispatch(data)) 

有官方文档,甚至还有一个插件解释了如何为websocket做到这一点。


然而,执行此操作所需的代码非常简单,因此这里是我实现的除web套接字之外的其他功能。

export class SendAction {
static readonly type = '[Connection] SendAction';
public packedAction: any;
constructor(action: any) {
const type: string = action.__proto__.constructor.type;
this.packedAction = { type: type, ...action };
}
}

这将把一个操作作为参数,提取它的类型字符串和数据,并将其存储在packedAction属性下的元操作中。

在这种状态下,您可以添加一个处理程序,通过某种连接发送打包操作:

@Action(SendAction)
dispatch(context: StateContext<ConnectionModel>, action: SendAction) {
this.connection.send(action.packedAction);
}

最后,在接收器上,您可以简单地调度传输的动作:

connection.on('data', this.store.dispatch);

要向客户端发送操作,只需执行以下操作即可:

const action = new SomeAction("some payload");
this.store.dispatch(new SendAction(action));

注意,我建议在这里过滤操作,因为远程可以调度任何定义的操作。

最新更新