Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用具有净延迟数据包的ScheduledExecutorService_Java_Multithreading_Netty - Fatal编程技术网

Java 使用具有净延迟数据包的ScheduledExecutorService

Java 使用具有净延迟数据包的ScheduledExecutorService,java,multithreading,netty,Java,Multithreading,Netty,我试图将一个数据包延迟5秒,但netty在调用通道.write后数秒发送数据包 可运行 public class SendInvalidPassword implements Runnable { private Player player; public SendInvalidPassword(Player player){ this.player = player; } @Override public void run() {

我试图将一个数据包延迟5秒,但netty在调用
通道.write
后数秒发送数据包

可运行

public class SendInvalidPassword implements Runnable {
    private Player player;
    public SendInvalidPassword(Player player){
        this.player = player;
    }

    @Override
    public void run() {
        System.out.println("Sending invalid login");
        this.player.sendPacket(Identifiers.Outbound.Login_Result, Unpooled.buffer(3).writeByte(2).writeByte(0).writeByte(0));
    }
}
发送包

public void sendPacket(int[] identifiers, ByteBuf data) {
    if (this.channel.isWritable()) {
        System.out.println("Send: "+identifiers[0]+", "+identifiers[1]);
        ByteBuf d = Unpooled.buffer();
        d.writeByte(identifiers[0]).writeByte(identifiers[1]).writeBytes(data.array());
        this.channel.write(d);
    }
}
我如何安排任务

service.schedule(new SendInvalidPassword(player), 5, TimeUnit.SECONDS);

如何在不造成数据包延迟的情况下安排任务?

我想出来了,
context.flush在我写数据包之前已经被调用了。我只是添加了一个名为
sendPacketFlush
的新方法,并将
channel.write
替换为
channel.writeAndFlush
,它现在可以工作。

我正试图将数据包延迟2秒,但netty在调用channel.write后数秒发送数据包。
我如何安排任务而不导致数据包延迟?
似乎相反。数据包延迟超过5秒,它在执行runnable后数秒发送数据包。