如何从Netty向客户端发送多个响应

时间:2014-01-22 03:59:12

标签: java netty tcp-ip

我想根据后端流程向client发送多个响应。但在Netty示例中,我看到echo server同时发送回response

我的要求是,我需要验证客户端并向他发送OK响应,然后在可用时向他发送DB更新。

如何向responses发送更多client?请指导我一个例子或任何指南?

3 个答案:

答案 0 :(得分:1)

在管道中的每一点,您都可以从Channel对象(或MessageEvent)获取管道ChannelEvent对象,该对象从处理程序传递到处理程序。您可以使用此信息在管道中的不同点发送多个响应。

如果我们将echo服务器示例作为基础,我们可以添加一个再次发送echo的处理程序(也可以在同一个处理程序中完成,但示例是显示多个处理程序可以响应)。

    public class EchoServerHandler extends ChannelHandlerAdapter {

        public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
           Channel ch = e.getChannel();
           // first message
           ch.write(e.getMessage());
        }
        // ...
    }

    public class EchoServerHandler2 extends ChannelHandlerAdapter {

           public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
           Channel ch = e.getChannel();
           // send second message     
           ch.write(e.getMessage());
        }
        // ...
    }

答案 1 :(得分:0)

只要您引用了相关的Channel(或ChannelHandlerContext),就可以这样做。例如,您可以这样做:

public class MyHandler extends ChannelHandlerAdapter {
  ...
  public void channelRead(ctx, msg) {
    MyRequest req = (MyRequest) msg;
    ctx.write(new MyFirstResponse(..));
    executor.execute(new Runnable() {
      public void run() {
        // Perform database operation
        ..
        ctx.write(new MySecondResponse(...));
      }
    }
  }
  ...
}

答案 2 :(得分:0)

只要Netty没有关闭频道,您就可以这样做。当你完成时,你最好自己调用close()。

以下是一个示例:https://stackoverflow.com/a/48128514/2557517