в моем клиентском> серверном приложении, клиент отправит код операции, который сообщает серверу, какой сервис инициировать, однако дизайн немного странный, когда он приходит, чтобы обновлять запросы, когда я получаю код операции, клиент ожидает 8 (фиктивных) байтов, чтобы сообщить ему начать отправлять данные обновления.Декодер «handshake» Netty, лучший способ сообщить клиенту отправить данные
Вот мое рукопожатие декодер:
@Override
protected void decode(ChannelHandlerContext ctx, ByteBuf buffer, List<Object> out) {
if (!buffer.isReadable()) {
return;
}
int id = buffer.readUnsignedByte();
switch (id) {
case HandshakeConstants.SERVICE_GAME:
ctx.pipeline().addFirst("loginEncoder", new LoginEncoder());
ctx.pipeline().addAfter("handshakeDecoder", "loginDecoder", new LoginDecoder());
break;
case HandshakeConstants.SERVICE_UPDATE:
ctx.pipeline().addFirst("updateEncoder", new UpdateEncoder());
ctx.pipeline().addBefore("handler", "updateDecoder", new UpdateDecoder());
// XXX: Better way?
ByteBuf buf = ctx.alloc().buffer(8).writeLong(0);
ctx.channel().writeAndFlush(buf);
break;
default:
throw new IllegalStateException("Invalid service id");
}
ctx.pipeline().remove(this);
out.add(new HandshakeMessage(id));
}
Как вы можете видеть в коде после того, как я добавить соответствующий кодер и канальный обработчик для обслуживания к трубопроводу, я должен написать 8 байт, чтобы сообщить клиенту начать отправку данных обновления; есть ли (чистый) способ обойти это?
Я рад, что это имеет смысл для кого-то: P это просто неправильно для меня, я не знаю почему. Спасибо за заверение. – rmcmk