gpt4 book ai didi

java - netty 中的多个处理程序

转载 作者:行者123 更新时间:2023-11-30 11:45:45 25 4
gpt4 key购买 nike

我想在 netty 中做一种日志记录代理。目标是能够让 Web 浏览器向 Netty 服务器发出 HTTP 请求,将它们传递到后端 Web 服务器,而且还能够根据 HTTP 特定事物采取某些操作。

有几个有用的 netty exmaples,HexDumpProxy(它执行代理部分,与协议(protocol)无关),我只从 HttpSnoopServerHandler 中获取了一些代码。

我的代码现在看起来像这样:HexDumpProxyInboundHandler 可以在 http://docs.jboss.org/netty/3.2/xref/org/jboss/netty/example/proxy/HexDumpProxyInboundHandler.html 找到

//in HexDumpProxyPipelineFactory
public ChannelPipeline getPipeline() throws Exception {
ChannelPipeline p = pipeline(); // Note the static import.
p.addLast("handler", new HexDumpProxyInboundHandler(cf, remoteHost, remotePort));

p.addLast("decoder", new HttpRequestDecoder());
p.addLast("handler2", new HttpSnoopServerHandler());
return p;
}


//HttpSnoopServerHandler
public class HttpSnoopServerHandler extends SimpleChannelUpstreamHandler {
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
HttpRequest request = (HttpRequest) e.getMessage();
System.out.println(request.getUri());
//going to do things based on the URI
}
}

不幸的是,HttpSnoopServerHandler 中的 messageReceived 从未被调用 - 似乎 HexDumpProxyInboundHandler 消耗了所有事件。

我怎么能有两个处理程序,其中一个需要解码器而另一个不需要(我宁愿使用 HexDumpProxy,它不需要理解 HTTP,它只是代理所有连接,但是我的 HttpSnoopHandler 需要在它前面有 HttpRequestDecoder)?

最佳答案

我没试过,但你可以扩展 HexDumpProxyInboundHandler 并用类似的东西覆盖 messageReceived

super.messageReceived(ctx, e);
ctx.sendUpstream(e);

或者,您可以直接将 HexDumpProxyInboundHandler 修改为 messageReceived 做的最后一件事是调用 super.messageReceived(ctx,e)。

这仅适用于来自客户端的入站数据。来自您正在代理的服务的数据仍然会被传递,而您的代码不会看到它。

关于java - netty 中的多个处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10197714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com