Заказ канальных хендлеров в Netty - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь выучить обработчики нетти-каналов и спотыкаюсь об этом учебнике .

В файле NettyServer.java автор упоминал о регистрации обработчиков каналов в конвейере каналов.

    ch.pipeline().addLast(
    new RequestDecoder(), 
    new ResponseDataEncoder(), 
    new ProcessingHandler());

Этот приказ немного смущает меня. Я бы зарегистрировал заказ как ниже, так как

  1. запрос декодируется
  2. декодированный запрос обрабатывается и генерируется ответ
  3. ответ декодируется в правильном порядке.

    ch.pipeline().addLast(
    new RequestDecoder(),
    new ProcessingHandler(),
    new ResponseDataEncoder());
    

В чем причина различного порядка в Netty?

1 Ответ

0 голосов
/ 11 мая 2018

Важно понимать, что входящие и исходящие сообщения (и события) движутся в разных направлениях.Входящие данные (то, что вы получаете) будут начинаться с заголовка ChannelPipeline, а написанные вами сообщения будут начинаться с конца.Таким образом, порядок вызываемых обработчиков отличается.

Проверьте Javadocs ChannelPipeline, который также имеет своего рода диаграмму, чтобы сделать его более понятным:

http://netty.io/4.1/api/io/netty/channel/ChannelPipeline.html

...