Java 使用具有净延迟数据包的ScheduledExecutorService
我试图将一个数据包延迟5秒,但netty在调用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() {
通道.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后数秒发送数据包。