Spring boot 使用spring boot rsocket捕获取消帧类型

Spring boot 使用spring boot rsocket捕获取消帧类型,spring-boot,websocket,reactor-netty,rsocket,Spring Boot,Websocket,Reactor Netty,Rsocket,我有一个spring boot rsocket实现,如果客户端取消或关闭其rsocket请求,那么我想取消服务器上的其他订阅注册 在spring引导服务器上的日志中,我可以看到发送或接收到一条取消消息: WARN i.r.t.n.s.WebsocketServerTransport$1 [reactor-http-nio-3] received WebSocket Close Frame - connection is closing INFO r.u.Loggers$Slf4JLogger [

我有一个spring boot rsocket实现,如果客户端取消或关闭其rsocket请求,那么我想取消服务器上的其他订阅注册

在spring引导服务器上的日志中,我可以看到发送或接收到一条取消消息:

WARN i.r.t.n.s.WebsocketServerTransport$1 [reactor-http-nio-3] received WebSocket Close Frame - connection is closing
INFO r.u.Loggers$Slf4JLogger [reactor-http-nio-3] cancel()
如何捕获和处理此取消信号

我尝试取消端点,但这些端点无法捕获信号:

@MessageMapping("cancel")
Flux<Object> onCancel() {
    log.info("Captured cancel signal");
}
@MessageMapping(“取消”)
通量onCancel(){
日志信息(“捕获的取消信号”);
}

@ConnectMapping(“取消”)
通量onCancel2(){
日志信息(“捕获的取消2信号”);
}

上的这个问题可能与此相关,而上的这个问题要捕获取消信号,可以使用subscribe To
onClose()
事件

在控制器中

@控制器
类RSocketConnectionController{
@连接映射(“客户端id”)
趣味onConnect(rSocketRequester:rSocketRequester,客户端ID:String){
//rSocketRequester.rsocket().dispose()//拒绝连接
rSocketRequester
.rsocket()
.onClose()
.subscribe(null,null{
log.info(“{}刚刚断开连接”,clientId)
//你想干什么就干什么
})
}
}
您的客户端需要正确发送安装框架才能调用此
@ConnectMapping
。如果使用
rsocket js
,则需要添加如下有效负载:

const client=new RSocketClient({
//发送/接收JSON对象,而不是字符串/缓冲区
序列化程序:{
数据:JsonSerializer,
元数据:IdentitySerializer
},
设置:{
//用于服务器上的连接映射
有效载荷:{
数据:“唯一的客户端id”,//TODO您可以在服务器端接收此数据吗
元数据:String.fromCharCode(“客户端id.length)+“客户端id”
},
//ms btw正在向服务器发送keepalive
keepAlive:60000,
.....
}
});

这不是一个明确的问题。答案是

INFO r.u.Loggers$Slf4JLogger[reactor-http-nio-3]cancel()

从原始
@MessageMapping
端点设置的
FluxSink
可以看到

例如:

@MessageMapping("hello")
Flux<Object> hello(@Payload String message) {       
    return myService.generateWorld(message);
}

sink.onCancel()
将处理从客户端到
hello
端点的流量取消。

谢谢,我无法完全实现这一点,但回答了下面的
cancel()
问题。仍然不知道更高版本的
WebSocket关闭框架
Sink.Many()
使用
@MessageMapping("hello")
Flux<Object> hello(@Payload String message) {       
    return myService.generateWorld(message);
}
public Flux<Object> generateWorld(String hello) {
    EmitterProcessor<Object> emitter = EmitterProcessor.create();
    FluxSink<Object> sink = emitter.sink(FluxSink.OverflowStrategy.LATEST);

    // doing stuff with sink here
    sink.next(stuff());

    // This part will handle a cancel from the client
    sink.onCancel(() -> {log.info("********** SINK.onCancel ***********");});

    return Flux.from(emitter));  
}