我怎样才能在 nettyinbound 中收到完整的信号?
how can i receive complete signal in nettyinbound?
public static void main(String[] args) {
TcpServer
.create()
.port(8080)
.handle((in,out)->{
return in.receive().retain().asString()
.doOnNext(System.out::println)
.doOnComplete(()->{
System.out.println("complete");
}).then(Mono.defer(()->{
System.out.println("do something else");
return Mono.empty();
}));
})
.bindNow()
.onDispose()
.block();
}
收到nettyinbound的消息后想做点什么
但它永远不会转到函数 then() 并且不会触发 doOnComplete。
如果我将 in.receive().retain().asString() 切换为 Mono.just("hello world") 然后 doOnComplete 可以被触发
这是TCP通信。除非您有一些特定的协议(以指示通信结束),否则您可以在客户端和服务器之间进行通信(它们交换数据),除非其中之一关闭连接。 I/O 处理程序取消提供了用于 TCP 的 Reactor Netty 中的连接关闭。上面的例子要改成这个:
public static void main(String[] args) {
TcpServer
.create()
.port(8080)
.handle((in, out) -> {
return in.receive().retain().asString()
.doOnNext(System.out::println)
.doOnCancel(() -> {
System.out.println("cancel received");
}).then();
})
.bindNow()
.onDispose()
.block();
}
public static void main(String[] args) {
TcpServer
.create()
.port(8080)
.handle((in,out)->{
return in.receive().retain().asString()
.doOnNext(System.out::println)
.doOnComplete(()->{
System.out.println("complete");
}).then(Mono.defer(()->{
System.out.println("do something else");
return Mono.empty();
}));
})
.bindNow()
.onDispose()
.block();
}
收到nettyinbound的消息后想做点什么
但它永远不会转到函数 then() 并且不会触发 doOnComplete。
如果我将 in.receive().retain().asString() 切换为 Mono.just("hello world") 然后 doOnComplete 可以被触发
这是TCP通信。除非您有一些特定的协议(以指示通信结束),否则您可以在客户端和服务器之间进行通信(它们交换数据),除非其中之一关闭连接。 I/O 处理程序取消提供了用于 TCP 的 Reactor Netty 中的连接关闭。上面的例子要改成这个:
public static void main(String[] args) {
TcpServer
.create()
.port(8080)
.handle((in, out) -> {
return in.receive().retain().asString()
.doOnNext(System.out::println)
.doOnCancel(() -> {
System.out.println("cancel received");
}).then();
})
.bindNow()
.onDispose()
.block();
}