我正在尝试将数据包延迟5秒,但是netty在调用channel.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));
}
}
player.sendPacket
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);
如何安排任务而不导致数据包延迟?
答案 0 :(得分:0)
我知道了,context.flush
在写那个包之前已经被调用了。我只是添加了一个名为sendPacketFlush
的新方法,并将channel.write
替换为channel.writeAndFlush
,现在可以正常工作了。