NETTY 4.1.4:处理请求后回复客户端的 TCP 套接字服务器

NETTY 4.1.4: TCP Socket Server which replies back towards clients after processing requests

我是 Netty 的新手,打算创建一个 tcp 套接字服务器,它读取每个客户端的信息并在立即处理请求之前回复客户端,即当消息进入 ChannelInboundHandlerAdapter class.

的重写 channelRead 方法时,对客户端的某种确认

请指导我上面指定的objective。 我目前正在尝试基本的 netty 4.1.4 回显服务器示例,但是我希望服务器向客户端发回确认,所以我更新了 channelread 方法,如下所示:

@Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) {
        ctx.write(msg);
        ChannelFuture cf = ctx.channel().write("FROM SERVER");
        System.out.println("Channelfuture is "+cf);
    }

得到的输出结果如下:

Channelfuture is DefaultChannelPromise@3f4ee9dd(failure: java.lang.UnsupportedOperationException: unsupported message type: String (expected: ByteBuf, FileRegion))

我理解它期待 bytebuf 的错误,但我如何实现它?此外,此方法是否能够向客户端发送确认

可以使用String.getBytes(Charset) and Unpooled.wrappedBuffer(byte[])转成ByteBuf

ChannelFuture cf = ctx.channel()
    .write(Unpooled.wrappedBuffer("FROM SERVER".getBytes(CharsetUtil.UTF_8)));

另请注意,ctx.channel().write(...); 可能不是您想要的。请考虑 ctx.write(...);。不同之处在于,如果您的处理程序是 ChannelDuplexHandler,它会在您执行 channel().write() 时收到写入事件。使用 ctx 而不是 channel 将从管道中的处理程序点发送写入,而不是从管道末端发送,这通常是您想要的。