PaperMC/patches/server/0153-revert-serverside-behavior-of-keepalives.patch

69 lines
4.2 KiB
Diff
Raw Permalink Normal View History

2021-06-11 14:02:28 +02:00
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Shane Freeder <theboyetronic@gmail.com>
Date: Sun, 15 Oct 2017 00:29:07 +0100
Subject: [PATCH] revert serverside behavior of keepalives
This patch intends to bump up the time that a client has to reply to the
server back to 30 seconds as per pre 1.12.2, which allowed clients
more than enough time to reply potentially allowing them to be less
tempermental due to lag spikes on the network thread, e.g. that caused
by plugins that are interacting with netty.
We also add a system property to allow people to tweak how long the server
will wait for a reply. There is a compromise here between lower and higher
values, lower values will mean that dead connections can be closed sooner,
whereas higher values will make this less sensitive to issues such as spikes
from networking or during connections flood of chunk packets on slower clients,
at the cost of dead connections being kept open for longer.
2023-09-21 23:04:51 +02:00
diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
2024-10-22 23:30:51 +02:00
index 6fd8204a8d66d26c3011d197c004398d320dc469..b36528ad18c8603994c6a821b19b99581717b44c 100644
2023-09-21 23:04:51 +02:00
--- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
2024-10-22 23:30:51 +02:00
@@ -75,7 +75,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
2023-09-21 23:04:51 +02:00
protected final MinecraftServer server;
public final Connection connection; // Paper
2024-04-24 03:25:14 +02:00
private final boolean transferred;
2022-06-07 22:45:38 +02:00
- private long keepAliveTime;
2023-09-21 23:04:51 +02:00
+ private long keepAliveTime = Util.getMillis(); // Paper
2022-06-07 22:45:38 +02:00
private boolean keepAlivePending;
private long keepAliveChallenge;
2024-04-24 03:25:14 +02:00
private long closedListenerTime;
2024-10-22 23:30:51 +02:00
@@ -83,6 +83,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
2023-09-21 23:04:51 +02:00
private int latency;
private volatile boolean suspendFlushingOnServerThread = false;
2023-12-25 11:51:44 +01:00
public final java.util.Map<java.util.UUID, net.kyori.adventure.resource.ResourcePackCallback> packCallbacks = new java.util.concurrent.ConcurrentHashMap<>(); // Paper - adventure resource pack callbacks
2021-06-11 14:02:28 +02:00
+ private static final long KEEPALIVE_LIMIT = Long.getLong("paper.playerconnection.keepalive", 30) * 1000; // Paper - provide property to set keepalive limit
2023-09-21 23:04:51 +02:00
public ServerCommonPacketListenerImpl(MinecraftServer minecraftserver, Connection networkmanager, CommonListenerCookie commonlistenercookie, ServerPlayer player) { // CraftBukkit
this.server = minecraftserver;
2024-10-22 23:30:51 +02:00
@@ -239,18 +240,22 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
2021-06-11 14:02:28 +02:00
2023-09-21 23:04:51 +02:00
protected void keepConnectionAlive() {
2024-10-22 23:30:51 +02:00
Profiler.get().push("keepAlive");
2021-06-11 14:02:28 +02:00
- long i = Util.getMillis();
+ // Paper start - give clients a longer time to respond to pings as per pre 1.12.2 timings
2023-06-07 21:37:42 +02:00
+ // This should effectively place the keepalive handling back to "as it was" before 1.12.2
+ long currentTime = Util.getMillis();
+ long elapsedTime = currentTime - this.keepAliveTime;
2024-04-24 03:25:14 +02:00
- if (!this.isSingleplayerOwner() && i - this.keepAliveTime >= 25000L) { // CraftBukkit
- if (this.keepAlivePending) {
2024-05-11 02:23:58 +02:00
+ if (!this.isSingleplayerOwner() && elapsedTime >= 15000L) { // Paper - use vanilla's 15000L between keep alive packets
+ if (this.keepAlivePending && !this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // Paper - check keepalive limit, don't fire if already disconnected
2023-09-21 23:04:51 +02:00
this.disconnect(ServerCommonPacketListenerImpl.TIMEOUT_DISCONNECTION_MESSAGE);
2024-04-24 03:25:14 +02:00
- } else if (this.checkIfClosed(i)) {
+ } else if (this.checkIfClosed(currentTime)) { // Paper
2021-06-12 14:58:17 +02:00
this.keepAlivePending = true;
- this.keepAliveTime = i;
- this.keepAliveChallenge = i;
+ this.keepAliveTime = currentTime;
+ this.keepAliveChallenge = currentTime;
this.send(new ClientboundKeepAlivePacket(this.keepAliveChallenge));
2021-06-11 14:02:28 +02:00
}
}
+ // Paper end - give clients a longer time to respond to pings as per pre 1.12.2 timings
2021-06-11 14:02:28 +02:00
2024-10-22 23:30:51 +02:00
Profiler.get().pop();
2023-09-21 23:04:51 +02:00
}