Я читал Netty Guide, это не объясняет многое на ChannelFuture. Я считаю, что ChannelFuture - это сложная идея при ее применении.Как работает Netty ChannelFuture?
То, что я пытаюсь сделать, - написать сообщение в контекст после его первоначального ответа. В отличие от типичного потока запросов/ответов. Мне нужен поток, как это:
- клиента отправить запрос -> сервер (Нетти)
- Сервер отправляет ответ с ctx.writeAndFlush (МВП);
- Сервер отправляет еще одно сообщение этому ctx после того, как шаг 2 завершен.
Проблема заключается в том, что если я делаю что-то вроде этого, то вторая запись не будет посылать:
ctx.writeAndFlush(response);
Message newMsg = createMessage();
ctx.writeAndFlush(newMsg); //will not send to client
Тогда я пытаюсь использовать ChannelFuture, он работает, но я не уверен, если я логически исправить:
ChannelFuture msgIsSent = ctx.writeAndFlush(response);
if(msgIsSent.isDone())
{
Message newMsg = createMessage();
ctx.writeAndFlush(newMsg); //this works
}
или следует использовать вместо этого ChannelFutureListener()?
ChannelFuture msgIsSent = ctx.writeAndFlush(response);
msgIsSent.addListener(new ChannelFutureListener(){
@Override
public void operationComplete(ChannelFuture future)
{
Message newMsg = createMessage();
ctx.writeAndFlush(newMsg);
}
});
Будет ли это также работать?
Какой подход является наилучшей практикой? Есть ли потенциальная проблема с использованием метода 2?