将数据发送到 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 不会抛出任何异常。
这就是为什么它停止 运行 而没有任何警告
我想每 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 不会抛出任何异常。 这就是为什么它停止 运行 而没有任何警告