我有一个非常简单的netty应用程序,它既可以作为服务器,也可以作为客户端。
客户端使用channel.writeAndFlush()
向服务器发送请求,然后在monitor.wait()
上阻止。
在channelRead()
中的客户端的InboundAdapter中,我找到了相应的监视器并执行monitor.notify()
以让请求客户端线程继续处理服务器的回复。
在ChannelHandler的channelRead()
服务器上,我执行以下操作:
为了限制正在处理的请求数量,我提交了一个任务,它将真正的工作作为现有EventLoop的新任务:ctx.executor().submit(new Task())
。我执行了大量的IO操作,之后我writeAndFlush()
将结果返回给客户。
这是我的管道设置:
new ObjectEncoder(),
new ObjectDecoder(LibConstants.Search.MAX_REQUIEST_SIZE, ClassResolvers.cacheDisabled(null))
这是bootstrap配置:
new ServerBootstrap()
.channel(NioServerSocketChannel.class)
.option(ChannelOption.SO_BACKLOG, 1000)
.option(ChannelOption.SO_KEEPALIVE, true)
我有两个问题:
io.netty.handler.codec.DecoderException: java.io.UTFDataFormatException
。我找不到任何明显的理由。由于我的管道设置非常简单。非常感谢您分享的任何建议或经验!