从netty的通道处理程序向主程序传递值

时间:2018-10-17 15:03:52

标签: java asynchronous netty

我正在编写一个使用netty来处理自定义协议的客户端。我定义了一个扩展了SimpleChannelInboundHandler的处理程序,该处理程序可以处理发送和接收消息。

public  class ClientHandler extends SimpleChannelInboundHandler {
    @Override
    protected void channelRead0(ChannelHandlerContext channelHandlerContext, Object o) throws Exception {
        log.info("Client received: " + ((ByteBuf)o).toString(CharsetUtil.UTF_8));
        System.out.println("Client received: " + ((ByteBuf)o).toString(CharsetUtil.UTF_8));
    }

    @Override
    public void channelActive(ChannelHandlerContext channelHandlerContext){
        log.info("Client sent: $"+ new MessageRequest().toString() +"$");
        channelHandlerContext.writeAndFlush(Unpooled.copiedBuffer((new MessageRequest().toString()), CharsetUtil.UTF_8));
    }


    @Override
    public void exceptionCaught(ChannelHandlerContext channelHandlerContext, Throwable cause){
        cause.printStackTrace();
        channelHandlerContext.close();
    }
}

此处理程序能够将响应打印到控制台。但是,由于我正在编写将由其他服务使用的客户端,因此我需要将响应发送到正在调用客户端的服务。

请帮助我将收到的响应发送到呼叫服务。

1 个答案:

答案 0 :(得分:0)

您可以将侦听服务的引用存储在您的ClientHandler类中,并调用该服务类的setMessage方法,以从处理程序的channelRead0方法中向其发送消息。

更好的方法是使用观察者模式