使用SpringWebreactive分发状态”;更新;给大量的客户

使用SpringWebreactive分发状态”;更新;给大量的客户,spring,reactive-programming,Spring,Reactive Programming,想象一个Spring Web反应式控制器的场景,其风格有两种: @RequestMapping("/state/updatestream) public Flux<State> getStateUpdates() { return stateService.updateStream(); } @RequestMapping("/state/update") { public Mono<Void> doUpdate(State state) { retur

想象一个Spring Web反应式控制器的场景,其风格有两种:

@RequestMapping("/state/updatestream)
public Flux<State> getStateUpdates() {
    return stateService.updateStream();
}

@RequestMapping("/state/update") {
public Mono<Void> doUpdate(State state) {
    return stateService.doUpdate(state);
}
@RequestMapping(“/state/updatestream”)
公共流量getStateUpdates(){
return stateService.updateStream();
}
@请求映射(“/state/update”){
公共单双数据(状态){
return stateService.doUpdate(状态);
}
其中,当客户端调用doUpdate方法时,stateService将向所有客户端推送更新(通过服务器端事件流)。更新将是完整状态,而不是增量。推送的状态顺序很重要

为了做到这一点,实现stateService的好方法或技术是什么


我一直忙于创建一个自定义发布服务器来实现这一点,但我在订阅方面遇到了问题(保持发布服务器中剩余发送的消息数似乎是一件痛苦的事情,因为订阅对象上的请求方法可以同时调用,导致最新状态被同时推送到客户端…我只希望用户只获得一次相同的状态)。即使这样,它也无法很好地扩展,因为我只是以有状态的方式将状态保存在应用程序的内存中。

您的意思是只想向客户端发送一次状态吗?即使客户端在T+n时调用此方法,您也要向他发送迄今为止记录的所有状态,但不超过一次。tat正确吗?我想在他连接时向他发送最新状态。然后,当其他客户端(或他自己)更新状态时,新状态应发送给仍然连接的所有人(而不是取消连接)。当然会发送。这里有什么混乱之处,如果我误解了你的问题,很抱歉。好的,我正在从stateService上寻找一种体面的、可扩展的方法来实现这一点。