【发布时间】:2015-02-19 18:14:05
【问题描述】:
在我的客户端->服务器应用程序中,客户端将发送一个操作码,告诉服务器要启动哪个服务,但是在更新请求时设计有点奇怪,当我收到操作码时,客户端期望 8 (虚拟)字节告诉它开始发送更新数据。
这是我的握手解码器:
@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 个字节来告诉客户端开始发送更新数据;有什么(干净的)方法可以解决这个问题吗?
【问题讨论】: