У меня нетти-клиент, который подключается к удаленному серверу для цикла запрос-ответ. Я хочу заблокировать, пока удаленное соединение не будет успешным, и я проанализировал ответ.
Вот что я делаю
Channel ch = bootstrap.connect(addr).sync().channel();
ChannelFuture f = ch.writeAndFlush(obj);
f.sync();
f.channel().close();
System.out.println("hello world");
На моем обработчике
MyHandler extends ChannelInboundHandlerAdapter {
static Map<String,Object> = new HashMap<>();
@Override
public void channelRead(final ChannelHandlerContext ctx, Object msg) {
System.out.println("foo bar");
if (msg instanceof FullHttpResponse) {
parseAndPutInMap(msg);
}
ctx.channel().writeAndFlush(Unpooled.EMPTY_BUFFER).addListener(ChannelFutureListener.CLOSE);
}
}
То, что я заметил, вызывает f.sync (), а не блокирует. Я вижу "привет мир", напечатанный сразу перед "foo bar". Я также прошел через отладчик и не увидел нажатия ChannelRead сразу после вызова f.sync ().
так что здесь не так? Я хочу, чтобы эта операция блокировалась, поскольку мне нужно обработать ответ, прежде чем я решу, что делать.