【问题标题】:Difference between stateful xxxServerHandle and unstateful yyyServerhandle?有状态的 xxxServerHandle 和无状态的 yyyServerhandle 之间的区别?
【发布时间】: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 的含义之一),所以我使用了单例句柄。我是对的吗?

【问题讨论】:

    标签: java netty stateful


    【解决方案1】:

    如果它们是无状态的,您没有理由实例化新的处理程序。但在 Http 示例中,这些处理程序 是有状态的。他们从网络逐帧接收并将它们解析为标头和其他内容。然后如果请求被分块,聚合器将块组合成单个有效负载等。简而言之,除非您正在构建回显服务器,否则较低级别的处理程序可能必须是有状态的,但较高级别不需要。

    【讨论】:

      【解决方案2】:

      当文档说“有状态”时,这意味着状态信息作为字段存储在 ChannelHandler 中,因此无法在不同 Channel 之间共享 ChannelHandler。如果您没有将状态信息存储为字段,则可以将其用作 Singelton。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-28
        • 2018-08-11
        • 2021-07-31
        相关资源
        最近更新 更多