我有一个例子,它使用 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_TIMEOUT
和RxtxChannelOption.WAIT_TIME
并将它们设置为较小的值来使这些更“精确” 。
添加回答
举报
0/150
提交
取消