Mirror von
https://github.com/PaperMC/Velocity.git
synchronisiert 2024-12-24 15:20:35 +01:00
Create a new HttpClient per connection (#1243)
* Create a new HttpClient for each connection If the instance is using Java 21, the HttpClient resources will be cleaned using its AutoCloseable interface
Dieser Commit ist enthalten in:
Ursprung
ef861819e3
Commit
ecf936f356
@ -595,8 +595,8 @@ public class VelocityServer implements ProxyServer, ForwardingAudience {
|
||||
this.cm.closeEndpoints(false);
|
||||
}
|
||||
|
||||
public HttpClient getHttpClient() {
|
||||
return cm.getHttpClient();
|
||||
public HttpClient createHttpClient() {
|
||||
return cm.createHttpClient();
|
||||
}
|
||||
|
||||
public Ratelimiter getIpAttemptLimiter() {
|
||||
|
@ -43,6 +43,7 @@ import com.velocitypowered.proxy.protocol.packet.ServerLoginPacket;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.URI;
|
||||
import java.net.http.HttpClient;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.net.http.HttpResponse;
|
||||
import java.security.GeneralSecurityException;
|
||||
@ -213,7 +214,8 @@ public class InitialLoginSessionHandler implements MinecraftSessionHandler {
|
||||
server.getVersion().getName() + "/" + server.getVersion().getVersion())
|
||||
.uri(URI.create(url))
|
||||
.build();
|
||||
server.getHttpClient().sendAsync(httpRequest, HttpResponse.BodyHandlers.ofString())
|
||||
final HttpClient httpClient = server.createHttpClient();
|
||||
httpClient.sendAsync(httpRequest, HttpResponse.BodyHandlers.ofString())
|
||||
.whenCompleteAsync((response, throwable) -> {
|
||||
if (mcConnection.isClosed()) {
|
||||
// The player disconnected after we authenticated them.
|
||||
@ -264,7 +266,18 @@ public class InitialLoginSessionHandler implements MinecraftSessionHandler {
|
||||
response.statusCode(), login.getUsername(), playerIp);
|
||||
inbound.disconnect(Component.translatable("multiplayer.disconnect.authservers_down"));
|
||||
}
|
||||
}, mcConnection.eventLoop());
|
||||
}, mcConnection.eventLoop())
|
||||
.thenRun(() -> {
|
||||
if (httpClient instanceof final AutoCloseable closeable) {
|
||||
try {
|
||||
closeable.close();
|
||||
} catch (Exception e) {
|
||||
// In Java 21, the HttpClient does not throw any Exception
|
||||
// when trying to clean its resources, so this should not happen
|
||||
logger.error("An unknown error occurred while trying to close an HttpClient", e);
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (GeneralSecurityException e) {
|
||||
logger.error("Unable to enable encryption", e);
|
||||
mcConnection.close(true);
|
||||
|
@ -62,10 +62,9 @@ public final class ConnectionManager {
|
||||
public final BackendChannelInitializerHolder backendChannelInitializer;
|
||||
|
||||
private final SeparatePoolInetNameResolver resolver;
|
||||
private final HttpClient httpClient;
|
||||
|
||||
/**
|
||||
* Initalizes the {@code ConnectionManager}.
|
||||
* Initializes the {@code ConnectionManager}.
|
||||
*
|
||||
* @param server a reference to the Velocity server
|
||||
*/
|
||||
@ -79,9 +78,6 @@ public final class ConnectionManager {
|
||||
this.backendChannelInitializer = new BackendChannelInitializerHolder(
|
||||
new BackendChannelInitializer(this.server));
|
||||
this.resolver = new SeparatePoolInetNameResolver(GlobalEventExecutor.INSTANCE);
|
||||
this.httpClient = HttpClient.newBuilder()
|
||||
.executor(this.workerGroup)
|
||||
.build();
|
||||
}
|
||||
|
||||
public void logChannelInformation() {
|
||||
@ -238,8 +234,11 @@ public final class ConnectionManager {
|
||||
return this.serverChannelInitializer;
|
||||
}
|
||||
|
||||
public HttpClient getHttpClient() {
|
||||
return this.httpClient;
|
||||
@SuppressWarnings("checkstyle:MissingJavadocMethod")
|
||||
public HttpClient createHttpClient() {
|
||||
return HttpClient.newBuilder()
|
||||
.executor(this.workerGroup)
|
||||
.build();
|
||||
}
|
||||
|
||||
public BackendChannelInitializerHolder getBackendChannelInitializer() {
|
||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren