将数据发送到 Netty 中的通道的核心游戏逻辑循环

Core game logic loop to send data to channels in Netty

我想每 100 毫秒向所有通道发送一次世界状态。但它只调用一次。

我的代码:

        public class IncomeMessageTcpHandler extends SimpleChannelInboundHandler<byte[]> {

@Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        Channel channel = ctx.channel();

        channel.eventLoop().scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                System.out.println("send");
                channel.writeAndFlush(GameLogic.Instance.flushMessageData());
            }
        }, 100, 100, TimeUnit.MILLISECONDS);
    }
}

现在方法只调用一次。 我使用 4.1.13.Final

    public class UnityServerTcpChannelInitializer extends ChannelInitializer<SocketChannel> {
    @Override
    public void initChannel(SocketChannel ch) throws Exception {
        ChannelPipeline p = ch.pipeline();

        p.addLast("frameDecoder", new FixedLengthFrameDecoder(6));
        p.addLast("bytesDecoder", new ByteArrayDecoder());

        p.addLast("bytesEncoder", new ByteArrayEncoder());

        p.addLast(new IncomeMessageTcpHandler());
    }
}

当我评论时channel.writeAndFlush(GameLogic.Instance.flushMessageData());任务 运行 每 100 毫秒

天啊……我的错。 我的方法 GameLogic.Instance.flushMessageData() 生成 NullPointerException 但我不知道 Runnable 不会抛出任何异常。 这就是为什么它停止 运行 而没有任何警告