mirror of
https://github.com/Minestom/Minestom.git
synced 2024-11-09 20:30:08 +01:00
Added write and read limit
This commit is contained in:
parent
37a626121b
commit
f965c5b9c9
@ -12,6 +12,7 @@ import io.netty.channel.nio.NioEventLoopGroup;
|
|||||||
import io.netty.channel.socket.ServerSocketChannel;
|
import io.netty.channel.socket.ServerSocketChannel;
|
||||||
import io.netty.channel.socket.SocketChannel;
|
import io.netty.channel.socket.SocketChannel;
|
||||||
import io.netty.channel.socket.nio.NioServerSocketChannel;
|
import io.netty.channel.socket.nio.NioServerSocketChannel;
|
||||||
|
import io.netty.handler.traffic.ChannelTrafficShapingHandler;
|
||||||
import net.minestom.server.network.PacketProcessor;
|
import net.minestom.server.network.PacketProcessor;
|
||||||
import net.minestom.server.network.netty.channel.ClientChannel;
|
import net.minestom.server.network.netty.channel.ClientChannel;
|
||||||
import net.minestom.server.network.netty.codec.LegacyPingHandler;
|
import net.minestom.server.network.netty.codec.LegacyPingHandler;
|
||||||
@ -32,6 +33,10 @@ public class NettyServer {
|
|||||||
private String address;
|
private String address;
|
||||||
private int port;
|
private int port;
|
||||||
|
|
||||||
|
// Options
|
||||||
|
private long writeLimit;
|
||||||
|
private long readLimit;
|
||||||
|
|
||||||
public NettyServer(@NotNull PacketProcessor packetProcessor) {
|
public NettyServer(@NotNull PacketProcessor packetProcessor) {
|
||||||
Class<? extends ServerChannel> channel;
|
Class<? extends ServerChannel> channel;
|
||||||
|
|
||||||
@ -63,6 +68,11 @@ public class NettyServer {
|
|||||||
|
|
||||||
ChannelPipeline pipeline = ch.pipeline();
|
ChannelPipeline pipeline = ch.pipeline();
|
||||||
|
|
||||||
|
ChannelTrafficShapingHandler channelTrafficShapingHandler =
|
||||||
|
new ChannelTrafficShapingHandler(writeLimit, readLimit, 200);
|
||||||
|
|
||||||
|
pipeline.addLast("traffic-limiter", channelTrafficShapingHandler);
|
||||||
|
|
||||||
// First check should verify if the packet is a legacy ping (from 1.6 version and earlier)
|
// First check should verify if the packet is a legacy ping (from 1.6 version and earlier)
|
||||||
pipeline.addLast("legacy-ping", new LegacyPingHandler());
|
pipeline.addLast("legacy-ping", new LegacyPingHandler());
|
||||||
|
|
||||||
@ -97,14 +107,73 @@ public class NettyServer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the address of the server.
|
||||||
|
*
|
||||||
|
* @return the server address
|
||||||
|
*/
|
||||||
public String getAddress() {
|
public String getAddress() {
|
||||||
return address;
|
return address;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the port used by the server.
|
||||||
|
*
|
||||||
|
* @return the server port
|
||||||
|
*/
|
||||||
public int getPort() {
|
public int getPort() {
|
||||||
return port;
|
return port;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the server write limit.
|
||||||
|
* <p>
|
||||||
|
* Used when you want to limit the bandwidth used by a single connection.
|
||||||
|
* Can also prevent the networking threads from being unresponsive.
|
||||||
|
*
|
||||||
|
* @return the write limit in bytes
|
||||||
|
*/
|
||||||
|
public long getWriteLimit() {
|
||||||
|
return writeLimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Changes the server write limit
|
||||||
|
* <p>
|
||||||
|
* WARNING: the change will only apply to new connections, the current ones will not be updated.
|
||||||
|
*
|
||||||
|
* @param writeLimit the new write limit in bytes
|
||||||
|
* @see #getWriteLimit()
|
||||||
|
*/
|
||||||
|
public void setWriteLimit(long writeLimit) {
|
||||||
|
this.writeLimit = writeLimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the server read limit.
|
||||||
|
* <p>
|
||||||
|
* Used when you want to limit the bandwidth used by a single connection.
|
||||||
|
* Can also prevent the networking threads from being unresponsive.
|
||||||
|
*
|
||||||
|
* @return the read limit in bytes
|
||||||
|
*/
|
||||||
|
public long getReadLimit() {
|
||||||
|
return readLimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Changes the server read limit
|
||||||
|
* <p>
|
||||||
|
* WARNING: the change will only apply to new connections, the current ones will not be updated.
|
||||||
|
*
|
||||||
|
* @param readLimit the new read limit in bytes
|
||||||
|
* @see #getWriteLimit()
|
||||||
|
*/
|
||||||
|
public void setReadLimit(long readLimit) {
|
||||||
|
this.readLimit = readLimit;
|
||||||
|
}
|
||||||
|
|
||||||
public void stop() {
|
public void stop() {
|
||||||
serverChannel.close();
|
serverChannel.close();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user