【问题标题】:Netty 'handshake' decoder, better way to tell the client to send dataNetty 'handshake' 解码器,告诉客户端发送数据的更好方法
【发布时间】: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 个字节来告诉客户端开始发送更新数据;有什么(干净的)方法可以解决这个问题吗?

【问题讨论】:

    标签: java netty


    【解决方案1】:

    我认为您的解决方案是有道理的,我认为它没有任何问题。

    【讨论】:

    • 我很高兴这对某人有意义:P 我只是觉得不对劲,我不知道为什么。感谢您的安慰。
    猜你喜欢
    • 1970-01-01
    • 2015-02-10
    • 2011-12-21
    • 2013-05-31
    • 1970-01-01
    • 2015-04-07
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多