为了账号安全,请及时绑定邮箱和手机立即绑定

netty idlestatehandler 无效延迟时间

netty idlestatehandler 无效延迟时间

天涯尽头无女友 2021-12-18 15:30:51
我有一个例子,它使用 java 1.8 和 netty 4.1.30.Final 版本 IdleStateHandler 在 400 毫秒内没有采取任何行动时输出当前时间。但是,当前时间是以 2 秒而不是 400 毫秒为间隔输出的。这是我的示例代码客户端.javapublic void connect() {    EventLoopGroup workerGroup = new OioEventLoopGroup();    try {        Bootstrap bootstrap = new Bootstrap();        bootstrap.group(workerGroup)                .channel(RxtxChannel.class)                .option(RxtxChannelOption.BAUD_RATE, 38400)                .option(RxtxChannelOption.DATA_BITS, RxtxChannelConfig.Databits.DATABITS_8)                .option(RxtxChannelOption.PARITY_BIT, RxtxChannelConfig.Paritybit.NONE)                .option(RxtxChannelOption.STOP_BITS, RxtxChannelConfig.Stopbits.STOPBITS_1)                .handler(new ExampleChannelInitializer());        this.channel = bootstrap.connect(new RxtxDeviceAddress("COM1")).sync().channel();        this.channel.closeFuture().addListener(f -> {            workerGroup.shutdownGracefully();        });    } catch (Exception e) {        throw new ConnectionException(e.getMessage(), e);    }}示例ChannelInitializer.java@Overrideprotected void initChannel(RxtxChannel ch) throws Exception {    ChannelPipeline pipeline = ch.pipeline();    pipeline.addLast(new IdleStateHandler(0, 0, 400, TimeUnit.MILLISECONDS));    pipeline.addLast(new ChannelInboundHandlerAdapter() {        @Override        public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {            System.out.println(LocalDateTime.now());        }    });}安慰2018-10-30T10:42:02.7622018-10-30T10:42:04.7892018-10-30T10:42:06.8182018-10-30T10:42:08.8442018-10-30T10:42:10.871
查看完整描述

1 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

不幸的是,这只是 OIO 传输和 RXTX 在引擎盖下工作的一个事实。您可以通过使用RxtxChannelOption.READ_TIMEOUTRxtxChannelOption.WAIT_TIME并将它们设置为较小的值来使这些更“精确” 。


查看完整回答
反对 回复 2021-12-18
  • 1 回答
  • 0 关注
  • 418 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信