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
将从管道中的处理程序点发送写入,而不是从管道末端发送,这通常是您想要的。
我是 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
将从管道中的处理程序点发送写入,而不是从管道末端发送,这通常是您想要的。