【发布时间】:2012-05-03 16:41:42
【问题描述】:
我查看了 Netty 文档,发现一些 cmets 在 examples source Class: org.jboss.netty.example.factorial.FactorialServerHandler ,在这个 src 中,一些 cmets:
//##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());
所有的处理程序都是由带有“new”的管道创建的吗? Netty 中的所有示例都是有状态的?显然 Echo/Telnet 不需要保持 stateful prop。
在我的旧项目中,我使用 Netty 创建了一个 Http Server 来充当 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 服务器是无状态的(这是REST 的含义之一),所以我使用了单例句柄。我是对的吗?
【问题讨论】: