Netty客户管道在特定对象中得到响应?

时间:2019-02-28 20:28:39

标签: java networking netty

由于我看到的所有示例都只是在ClientHandler中输出到控制台,所以我想知道将这些数据转换为特定对象的正确方法。假设在某些控制器类中,用户可以按下按钮以请求或刷新服务器中的某些数据。我对该对象中的通道进行了引用,该对象将请求发送到服务器,并且服务器完成工作后,它将其发送回客户端,最终到达客户端管道。现在,我需要将数据取出并放入请求数据的对象中。

我可以想到两个选择。实现观察者模式,并在数据完成并解码后将数据发送回对象。发送请求的数据后,我将其添加为侦听器,并在接收到数据后将其删除。

或者也许我只能为此控制器类实现处理程序接口?当它期望数据时,我将其添加到管道中;当它接收到数据时,将其从管道中删除?伪的:

public class SomeControllerClass extends ChannelInboundHandlerAdapter {

    //...

    public void onButtonClick() {
        // Send a request to the server.
        channel().writeAndFlush(new someDataRequest);
        // Add this controller to the pipeline to handle the response once it arrived and decoded.
        channel().pipeline().addLast("someHandler", this);
    }

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) {
        // Do stuff with the data in this class
        // Remove this from the pipeline.
        channel().pipeline().remove("someHandler");
    }

    //...
}

这是解决我需要解决这个问题的方式吗?我正在将其从管道中删除,因为我担心其他希望类似数据的对象也会处理该数据。

换句话说,我想要做的是一个弹出窗口,显示“正在加载”,直到从服务器接收到数据并准备在该弹出窗口中呈现。

0 个答案:

没有答案