1

网络大师,

我一直想知道是否有快捷方式/Netty-Utility/smart-trick 将一个通道的输入连接到另一个通道的输出。更详细地考虑以下内容:

  1. 设置 Netty (http) 服务器
  2. 对于传入的MessageEvent 获取其ChannelBuffer
  3. 并将其输入通过管道传输到NettyClient- ChannelBuffer (按照 NettyServer 的方式设置)。

我对如何实现要点 3感兴趣。因为我的第一个想法是
// mock messageReceived(ChannelHandlerContext ctx, MessageEvent e):
ChannelBuffer bufIn = (ChannelBuffer) e.getMessage();
ChannelBuffer bufOut = getClientChannelBuffer();// 在别处设置
bufOut.write(bufIn);

在我看来很尴尬,因为
A. 我必须为每个 messageReceived-Event 确定目标 ChannelBuffer
B. 需要进行大量低级修补

我的愿望/愿景是将
--> 一个通道的输入 -->连接
到另一个通道的输出,
并让他们在没有任何额外编码的情况下进行 I/O。

非常感谢!,特劳德

PS:问题已经出现,因为我试图将各种 HTTP 请求分派到服务器(一个入口点)到其他几个服务器,具体取决于输入内容(基于第一个 HTTP 请求行的映射)。显然,我还需要做相反的技巧——将客户端返回到服务器——但我想这与之前问题的解决方案类似。

4

1 回答 1

2

看起来您需要在业务处理程序中使用多路复用器。业务处理程序可以有一张地图。将键作为“第一个 http 请求行”,将值作为服务器的输出通道。进行查找后,您只需执行channel.write(channelBuffer);

还可以看看 bruno de carvalho 的tcp tunnel,它可能会给你更多关于如何处理这些需求的想法。

于 2011-12-02T17:38:33.477 回答