From 6f95ba8d2ec42548040c07f8050b541ec4eb00a5 Mon Sep 17 00:00:00 2001 From: Ryley Kimmel Date: Tue, 3 Mar 2015 21:18:52 -0500 Subject: [PATCH] Fix potential latency issue with on-demand and login writes, constantly writing and flushing is an expensive syscall and should only be done when the channel has been fully read, other instant flushes such as for the game session or initializing HTTP requests must remain untouched as it will potentially block the entire server (and it's nice to have in-game actions done instantly anyway). --- src/org/apollo/net/ApolloHandler.java | 5 +++++ src/org/apollo/net/JagGrabChannelInitializer.java | 4 +++- src/org/apollo/net/codec/login/LoginDecoder.java | 4 ++-- src/org/apollo/net/session/LoginSession.java | 2 +- src/org/apollo/update/OnDemandRequestWorker.java | 2 +- 5 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/org/apollo/net/ApolloHandler.java b/src/org/apollo/net/ApolloHandler.java index 3a3a8065..78b029e6 100644 --- a/src/org/apollo/net/ApolloHandler.java +++ b/src/org/apollo/net/ApolloHandler.java @@ -100,4 +100,9 @@ public final class ApolloHandler extends ChannelInboundHandlerAdapter { } } + @Override + public void channelReadComplete(ChannelHandlerContext ctx) { + ctx.flush(); + } + } \ No newline at end of file diff --git a/src/org/apollo/net/JagGrabChannelInitializer.java b/src/org/apollo/net/JagGrabChannelInitializer.java index ca2980d9..ae860c85 100644 --- a/src/org/apollo/net/JagGrabChannelInitializer.java +++ b/src/org/apollo/net/JagGrabChannelInitializer.java @@ -14,6 +14,8 @@ import java.nio.charset.Charset; import org.apollo.net.codec.jaggrab.JagGrabRequestDecoder; import org.apollo.net.codec.jaggrab.JagGrabResponseEncoder; +import com.google.common.base.Charsets; + /** * A {@link ChannelInitializer} for the JAGGRAB protocol. * @@ -29,7 +31,7 @@ public final class JagGrabChannelInitializer extends ChannelInitializer response.writeByte(LoginConstants.STATUS_EXCHANGE_DATA); response.writeLong(0); response.writeLong(serverSeed); - ctx.channel().writeAndFlush(response); + ctx.channel().write(response); setState(LoginDecoderState.LOGIN_HEADER); } @@ -210,7 +210,7 @@ public final class LoginDecoder extends StatefulFrameDecoder ByteBuf buffer = ctx.alloc().buffer(1); buffer.writeByte(response); - ctx.writeAndFlush(buffer).addListener(ChannelFutureListener.CLOSE); + ctx.write(buffer).addListener(ChannelFutureListener.CLOSE); } } \ No newline at end of file diff --git a/src/org/apollo/net/session/LoginSession.java b/src/org/apollo/net/session/LoginSession.java index 754f1b99..61584ecc 100644 --- a/src/org/apollo/net/session/LoginSession.java +++ b/src/org/apollo/net/session/LoginSession.java @@ -107,7 +107,7 @@ public final class LoginSession extends Session { } } - ChannelFuture future = channel.writeAndFlush(new LoginResponse(status, rights, flagged)); + ChannelFuture future = channel.write(new LoginResponse(status, rights, flagged)); destroy(); diff --git a/src/org/apollo/update/OnDemandRequestWorker.java b/src/org/apollo/update/OnDemandRequestWorker.java index 7a28a0a8..949549d8 100644 --- a/src/org/apollo/update/OnDemandRequestWorker.java +++ b/src/org/apollo/update/OnDemandRequestWorker.java @@ -57,7 +57,7 @@ public final class OnDemandRequestWorker extends RequestWorker