【问题标题】:Netty: Pipe-ing output of one Channel to the input of an otherNetty:一个通道的输出到另一个通道的输入
【发布时间】:2012-01-11 11:52:37
【问题描述】:

网络大师,

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

  1. 设置 Netty (http) 服务器
  2. 对于 incoming MessageEvent 获取它的 ChannelBuffer
  3. 管道输入 NettyClient-ChannelBuffer (按照 NettyServer 的方式设置)。

我对如何实现 bullet-point 3. 很感兴趣 沿线的想法
// 模拟 messageReceived(ChannelHandlerContext ctx, MessageEvent e):
ChannelBuffer bufIn = (ChannelBuffer) e.getMessage();
ChannelBuffer bufOut = getClientChannelBuffer();// 在别处设置
bufOut.write(bufIn);

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

我的愿望/愿景是连接
--> 一个Channel的输入
--> 到另一个通道的输出
并让他们无需任何额外编码即可完成 I/O。

提前非常感谢! 特劳德

P.S:当我尝试将各种 HTTP 请求发送到 服务器(一个入口点)到其他几个服务器,具体取决于 输入内容(基于第一个 HTTP 请求行的映射)。 显然,我还需要做相反的技巧——通过管道返回客户端 到服务器 - 但我想它会类似于解决方案 之前的问题。

【问题讨论】:

    标签: io pipe netty channels


    【解决方案1】:

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

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

    【讨论】:

    • 感谢发帖!,详细:bruno de carvalho的tcp隧道是
    • 感谢发帖!,详细说明:Bruno de Carvalho 的 tcp 隧道接近我的要求,我需要稍微更改一下,因为 tcp 隧道是基于连接多路复用的,而我需要基于连接多路复用内容(也许我可以将内容嗅探整合到布鲁诺的隧道中,并问他是否愿意合并这些策略——它肯定会利用我们的方法)。我希望像 [link] docs.oracle.com/javase/7/docs/api/java/io/PipedInputStream.html 这样的管道,但我想同时我可以尝试为自己提供这样的管道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 2016-06-28
    • 1970-01-01
    • 2020-07-05
    • 2016-09-30
    相关资源
    最近更新 更多