2012-04-23 3 views
0

я рассмотрел Нетти документы, и нашел некоторые комментарии в примерах исходного класса: org.jboss.netty.example.factorial.FactorialServerHandler, в этом ЦСИ некоторые комментарии:Разница между состоянием xxxServerHandle и неуправляемым yyyServerhandle?

//##in org.jboss.netty.example.factorial.FactorialServerPipelineFactory 
    ...... 
    // and then business logic. 
    // Please note we create a handler for every new channel 
    // because it has stateful properties. 
    pipeline.addLast("handler", new FactorialServerHandler()); 

Но я еще раз проверьте другие примеры, такие а TelnetServerPipelineFactory, кажется, разница ничего, ручка создают путем:

// and then business logic. 
    pipeline.addLast("handler", new TelnetServerHandler()); 

Все обработчики созданы по трубопроводу с «новым»? И все примеры в Netty - это состояние? Очевидно, что Echo/Telnet не обязательно поддерживать поддержку состояния.

В моем старом проекте я использую Нетти создать HTTP-сервер, чтобы действовать как RESTful сервер, мой код обработчика:

public class HttpServerPipelineFactory implements ChannelPipelineFactory { 
     private final HttpServerHandler handler; 
     public ChannelPipeline getPipeline() throws Exception { 
      ChannelPipeline pipeline = pipeline(); 
      pipeline.addLast("decoder", new HttpRequestDecoder()); 
      pipeline.addLast("aggregator", new HttpChunkAggregator(1048576)); 
      pipeline.addLast("encoder", new HttpResponseEncoder()); 
      pipeline.addLast("handler", handler); //singleton 
      return pipeline; 
     } 
    } 

Моего RESTful сервер statefulless (который является одним из REST смысла), так Я использовал ручку singleton. Был ли я прав?

ответ

1

Когда документация говорит «stateful», это означает, что информация о состоянии хранится как поля в ChannelHandler и, следовательно, невозможно разделить ChannelHandler между различными каналами. Если у вас нет информации о состоянии, хранящейся в виде полей, вы можете использовать ее как Singelton.

0

У вас нет причин создавать новые обработчики, если они не имеют гражданства. Но в примерах Http эти обработчики : stateful. Они получают кадр за кадром из сети и анализируют их в заголовки, а что - нет. Затем, если запрос разбит на разделы, агрегатор объединяет куски в единую полезную нагрузку и т. Д. Короче говоря, если вы не создаете сервер эха, обработчики нижнего уровня, вероятно, должны быть работоспособными, но более высокий уровень не нужен.