0

我正在尝试将 Netty(版本 3.6.1.final)集成到我们当前的系统中,这样我就可以替换当前的 NIO 代码。

目前,我们有一个消息传递总线,其中事件排队等待其他侦听器处理,并将另一个事件放回总线上以进行进一步处理。

在我的 Netty 业务逻辑处理程序的 messageReceived() 方法中,我将向总线添加一个输入请求。我要传递的一件事是来自 Netty 事件消息的数据。

我认为我应该在这个 InputEvent 中传递 ChannelHandlerContext 以及接收到的数据/消息。这样最终在处理 OutputEvent 时,它可以使用最初传递的 ChannelHandlerContext 将处理后的数据发送回正确的 Netty Channel 上的请求客户端。

那么处理OutputEvent 的Output 任务如何与Netty 绑定呢?

我是否使用 ChannelHandlerContext 作为输入处理数据发出一些调用。我不想捆绑输出任务。

来自 Netty 处理程序的代码片段。

public void messageReceived(
        ChannelHandlerContext ctx, MessageEvent e) {

    byte[] message = (byte[])e.getMessage();

    try {
            data.add(message);
        }
    catch( IOException ioe )
        {
            logger.error(ioe);
        }

    InputEvent ie = new InputEvent( ctx, this, data.getBuffer() );

    try {
              bus.enqueue(ie);
    }
    catch( Exception ex )
   {
      logger.error(ex);
   }

来自输出处理器的代码片段。

public void run() {


    // note that the OutputEvent (event) is available here.  This is not a Netty event.
    ChannelHandlerContext ctx = event.getHandlerContext();
    ClientChannel handler = event.getHandler();

    // I need to send the data in event.getBuffer() back.

// Now what do I do here???


…
…
…

}

谢谢你。

4

2 回答 2

1

您只需致电:

InputEvent event = ...
ChannelHandlerContext ctx = ....
ctx.write(event.getBuffer());

或者:

InputEvent event = ...
Channel channel = ....
channel.write(event.getBuffer());
于 2013-01-16T06:48:59.997 回答
0
    // Make a new connection.
    ChannelFuture connectFuture =
        bootstrap.connect(new InetSocketAddress(host, port));

    // Wait until the connection is made successfully.
    Channel channel = connectFuture.awaitUninterruptibly().getChannel();

    // Get the handler instance to retrieve the answer.
    FactorialClientHandler handler =
        (FactorialClientHandler) channel.getPipeline().getLast();//get("your handler name")
于 2013-02-01T02:45:33.473 回答