Netty:几个处理程序,字节计数器

时间:2015-12-27 15:29:12

标签: java netty

  1. 我是Netty的新手并尝试计算每个频道的接收和发送字节数。我发现我应该使用ChannelTrafficShapingHandler,但我不知道如何达到我的目标。正如我所说,我应该编写自己的处理程序,它将从ChannelTrafficShapingHandler中添加一些方法?提供真实的代码示例会很棒。

    @Override
    public void initChannel(SocketChannel ch) {
    ChannelPipeline p = ch.pipeline();
    if (sslCtx != null) {
        p.addLast(sslCtx.newHandler(ch.alloc()));
    }
    p.addLast(new HttpRequestDecoder());
    // Uncomment the following line if you don't want to handle HttpChunks.
    //p.addLast(new HttpObjectAggregator(1048576));
    p.addLast(new HttpResponseEncoder());
    // Remove the following line if you don't want automatic content compression.
    //p.addLast(new HttpContentCompressor());
    p.addLast(new HttpSnoopServerHandler());
    
    p.addLast(new ChannelTrafficShapingHandler(0, 0));
    

    }

  2. 就像向处理程序添加类一样,但我该如何使用它呢?

    1. 我写了帖子(Netty http count requests)并被建议编写我自己的处理程序来计算我的请求,打开连接等。但是,我无法理解如何使用不同的处理程序管理不同的URL。例如,我有url / info - 这是okey,我想在Handler#1中处理它。然后,我有url / statistic,我想在那里计算我的值并打印它们。此网址应由Handler#2管理。我怎么能这样做?

    2. 我有很多数据应该在页面上输出(比如几个表格),我该怎么用呢?我认为该字符串不适合大输出

    3. 感谢您的耐心和答案

1 个答案:

答案 0 :(得分:1)

首先,在管道上添加HttpObjectAggregator处理程序。它将为您处理所有http chuncks并将FullHttpRequest置于管道上。

然后,实现扩展SimpleChannelInboundHandler<FullHttpRequest>的处理程序并将其添加到管道的末尾。在FullHttpRequest捕获到此处理程序中,您可以获取标题,请求的URI,内容等方法。您可以根据需要将内容数据大小存储到地图或其他地方,按请求的路径等。实现您需要的一切

对于响应,如果使用http / html,则使用文本(因此字符串)。实例化DefaultFullHttpResponse的实例,并将您的html文本作为此响应的内容。接下来,您只需通过调用ctx.writeAndFlush()将其推送到管道上(HttpResponseEncoder会将消息转换为有效的http响应)。

此外,您可以选择在管道上添加HttpContentCompressor以在可能的情况下激活压缩。