我怎样才能在 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();
}