2016-12-26 3 views
0

Как сделать следующее с Нетти:Нетти и несколько обработчиков

  1. если Ури начинается "/ статический/*" Путь использовать StaticHttpHandler
  2. если другой URI использует HttpHandler
  3. если "/ WS" использование WebSocketHandler

Теперь у меня есть этот код:

public class HttpHelloWorldServerInitializer extends ChannelInitializer<SocketChannel> { 
    @Override 
    public void initChannel(SocketChannel ch) { 
     ChannelPipeline p = ch.pipeline(); 
     p.addLast(new HttpServerCodec()); 
     p.addLast(new HttpHandler()); 

     // Other pipelene handlers? 
    } 
} 

Могу ли я использовать что-то вроде «swither» в конвейере? Или это не имеет смысла, и мне нужно обработать запрос uri внутри обработчика. Но как определить протокол websocket?

ответ

1

В вашем собственном HttpHandler вам необходимо сначала проверить uri, а затем решить, какой «настоящий» обработчик выполнить. Чтобы сделать это, 2 способа сделать это:

  • либо у вас есть в вашем бизнес-коде (HttpHandler) необходимые объекты уже Кутаиси или вновь распределённая (StaticHttpHandler и WebSocketHandler), а затем передать запрос вручную к ним, называя их (таким образом, они не являются более «стандартными» обработчиками Netty)
  • либо у вас есть один конкретный обработчик (например, HttpRouteHandler), который решает, какой обработчик должен добавить к конвейеру для этого запроса, и перейти к следующему текущему запросу

Первый простейший, но не простой способ расширения.

Второе немного сложнее, и вы должны быть уверены/чисты, что каждый запрос попадает в правый обработчик. Например,

  • Как только канал подключен, все запросы поступают в него той же самой природы? Если это так, то вы можете безопасно добавить нужный обработчик и даже удалить HttpRouteHandler.
  • , если нет, то для каждого запроса, вы должны решить, чтобы добавить/удалить необходимые обработчики по мере необходимости, сохраняя HttpRouteHandler в трубопроводе, чтобы справиться с новым контекстом

поговорку Короче говоря, вы пытаетесь для реализации разрешения маршрута в веб-службе.

Смежные вопросы