Websocket 任何人都可以解释此代码如何向指定用户发送消息 你能解释一下上面webflux代码中的代码是如何工作的吗?

Websocket 任何人都可以解释此代码如何向指定用户发送消息 你能解释一下上面webflux代码中的代码是如何工作的吗?,websocket,spring-webflux,Websocket,Spring Webflux,我知道所有的信息都存储在outputMessages中并进行了订阅。 当发出新消息时,它如何找到正确的会话?我的猜测是WebSocketHandler是一个只包含一个方法句柄的接口 我认为这反过来使它成为一个功能接口,可以用作lambda for (WebSocket item : clients.values()) { if (item.username.equals(ToUserName) ) { item.session.sendText(m

我知道所有的信息都存储在outputMessages中并进行了订阅。
当发出新消息时,它如何找到正确的会话?

我的猜测是
WebSocketHandler
是一个只包含一个方法
句柄的接口

我认为这反过来使它成为一个
功能接口
,可以用作lambda

    for (WebSocket item : clients.values()) {
        if (item.username.equals(ToUserName) ) {
            item.session.sendText(message);
            break;
        }
    }
}
因此,当与客户端建立会话时,客户端发送websocket事件。服务器将查找WebSocketHandler,并使用发送事件的客户端的会话填充它

如果你觉得这让人困惑,你可以实现这个接口

(session) -> { ... }
类ExampleHandler实现WebSocketHandler{
@凌驾
公共单声道句柄(WebSocketSession会话){
单声道输入=会话。接收()
.doOnNext(消息->{
// ...
})
.concatMap(消息->{
// ...
})
.然后();
通量源=;
Mono输出=session.send(source.map(session::textMessage));
返回Mono.zip(输入,输出).then();
}
}
@豆子
公共WebSocketHandler WebSocketHandler(){
返回新的ExampleHandler();
}
(session) -> { ... }
class ExampleHandler implements WebSocketHandler {

    @Override
    public Mono<Void> handle(WebSocketSession session) {

            Mono<Void> input = session.receive()
                    .doOnNext(message -> {
                            // ...
                    })
                    .concatMap(message -> {
                            // ...
                    })
                    .then();

            Flux<String> source = ... ;
            Mono<Void> output = session.send(source.map(session::textMessage));

            return Mono.zip(input, output).then();
    }
}

@Bean
public WebSocketHandler webSocketHandler() {
    return new ExampleHandler();
}