Страницы

Поиск по вопросам

среда, 27 ноября 2019 г.

Странное поведение при наследовании от ChannelInboundHandlerAdapter в netty

#java #ооп #netty


Есть класс наследуемый от ChannelInboundHandlerAdapter, где переопределяю нужные
методы. Например, channelUnregistered:

public abstract class HttpServerHandler extends ChannelInboundHandlerAdapter{

    @Override
    public void channelUnregistered(ChannelHandlerContext ctx) throws Exception {
        super. channelUnregistered(ctx);
        // something doing here
    }
    [...]
}


Если использую этот класс, то channelUnregistered срабатывает, когда закрывается
соединение с клиентом.

Но если я от него унаследуюсь:

public abstract class HttpsServerHandler extends HttpServerHandler {

}


При использовании этого класс channelUnregistered никогда не срабатывает. Но если
переопределю этот метод и просто вызову метод из super класса, то всё работает:

public abstract class HttpsServerHandler extends HttpServerHandler {

    @Override
    public void channelUnregistered(ChannelHandlerContext ctx) throws Exception {
        super. channelUnregistered(ctx);
    }
}


Мой мозг отказывается работать. В базовом классе есть этот метод, если я его не переопределяю
в дочернем, то должен вызваться метод базового класса. Или я что-то упускаю?
    


Ответы

Ответ 1



У netty есть класс ServerBootstrap, которому в настройках необходимо задать конфигурацию сервера. Одна из необходимых настроек вызывается функцией childHandler(), в которую передается объект типа ChannelHandler, обязанный контролировать запросы канала. Таким образом для каждого нового соединения создается объект ChannelHandler, который вы привязали ранее при помощи childHandler(). Однако ваши классы объявлены абстрактными и, очевидно, их экземпляры нигде не создаются. Если Вы "привяжете" HttpsServerHandler к своему серверу, то все должно работать.

Комментариев нет:

Отправить комментарий