Websocket 任何人都可以解释此代码如何向指定用户发送消息 你能解释一下上面webflux代码中的代码是如何工作的吗?
我知道所有的信息都存储在outputMessages中并进行了订阅。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
当发出新消息时,它如何找到正确的会话?我的猜测是
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();
}