Как закрыть соединение TcpClient с помощью Netty Reactor?

Я пытаюсь закрыть TCP-соединение из netty response.ipc.netty.tcp.TcpClient, но не могу найти способ сделать это легко, нет методов «отключить», «остановить» или «закрыть». Может кто-нибудь мне помочь? Я использую библиотеку response-netty.0.7.9.RELEASE.

Мой класс структурирован следующим образом:

private TcpClient client;
private NettyOutbound out;

public Mono<? extends NettyContext> connect() {
    client = TcpClient.create(host, port);
    return client.newHandler(this::handleConnection)
            .log("newHandler");
}

private Publisher<Void> handleConnection(NettyInbound in, NettyOutbound out) {
    this.out = out;
    return out
            .neverComplete()    //keep connection alive
            .log("Never close");
}

public void disconnect() {
    client = TcpClient. //What can i put here to close the connection?
}

Я ценю вашу помощь, заранее большое спасибо.


person Evandro    schedule 10.10.2018    source источник


Ответы (1)


Да, извини, что не опубликовал раньше. Все, что мне нужно было сделать, это передать соединение от tcp-клиента переменной поля, поэтому я смог удалить соединение с помощью метода dispose. Вот код.

private NettyOutbound out;
private Connection connection;

public ServerResponse connect() {
    return TcpClient.create()
        .host(tcpConfig.getHost())
        .port(tcpConfig.getPort())
        .handle(this::handleConnection)
        .connect()
        .flatMap(connection -> {
            this.connection = connection;
            log.info("Sending response to http client.");
            return ServerResponse.ok().build();
        });
}

private Publisher<Void> handleConnection(NettyInbound in, NettyOutbound out) {
    this.out = out;
    in.receive().asString(Charsets.ISO_8859_1)
        .log("In received")
        .subscribe(frameStr -> log.info(frameStr));
    return out
        .neverComplete()    //keep connection alive
        .log("Never close");
}

public void disconnect() {
    this.connection.dispose();
}
person Evandro    schedule 10.12.2018