From 71fe1d98cd96e900757e954cb8616b0efd3ae669 Mon Sep 17 00:00:00 2001 From: Simon Date: Wed, 21 Feb 2024 15:36:57 +0100 Subject: [PATCH] fix issues with keep alive --- .../src/main/java/unknow/server/http/HttpConnection.java | 8 ++++---- .../src/main/java/unknow/server/http/HttpProcessor.java | 5 ++--- .../src/main/java/unknow/server/nio/NIOLoop.java | 5 +++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/unknow-server-http/src/main/java/unknow/server/http/HttpConnection.java b/unknow-server-http/src/main/java/unknow/server/http/HttpConnection.java index bffb4f61..e1c3c617 100644 --- a/unknow-server-http/src/main/java/unknow/server/http/HttpConnection.java +++ b/unknow-server-http/src/main/java/unknow/server/http/HttpConnection.java @@ -30,8 +30,8 @@ public class HttpConnection extends NIOConnection { private Future exec = CompletableFuture.completedFuture(null); private HttpProcessor p; - protected final ServletResponseImpl res; - protected final ServletRequestImpl req; + protected ServletResponseImpl res; + protected ServletRequestImpl req; /** * create new RequestBuilder @@ -42,8 +42,6 @@ protected HttpConnection(ExecutorService executor, ServletContextImpl ctx, int k this.executor = executor; this.keepAliveIdle = keepAliveIdle; this.ctx = ctx; - this.res = new ServletResponseImpl(this); - this.req = new ServletRequestImpl(this, DispatcherType.REQUEST); } @Override @@ -57,6 +55,8 @@ public final void onRead() throws InterruptedException { return; if (!p.init(this)) return; + res = new ServletResponseImpl(this); + req = new ServletRequestImpl(this, DispatcherType.REQUEST); exec = executor.submit(p); } diff --git a/unknow-server-http/src/main/java/unknow/server/http/HttpProcessor.java b/unknow-server-http/src/main/java/unknow/server/http/HttpProcessor.java index 2b13d147..64259eaf 100644 --- a/unknow-server-http/src/main/java/unknow/server/http/HttpProcessor.java +++ b/unknow-server-http/src/main/java/unknow/server/http/HttpProcessor.java @@ -63,9 +63,8 @@ public void run() { out.flush(); } - close = keepAliveIdle == 0 || !"keep-alive".equals(req.getHeader("connection")); - if (!close) - res.setHeader("connection", "keep-alive"); + close = keepAliveIdle == 0 || !"keep-alive".equalsIgnoreCase(req.getHeader("connection")); + res.setHeader("connection", close ? "close" : "keep-alive"); events.fireRequestInitialized(req); doRun(req, res); events.fireRequestDestroyed(req); diff --git a/unknow-server-nio/src/main/java/unknow/server/nio/NIOLoop.java b/unknow-server-nio/src/main/java/unknow/server/nio/NIOLoop.java index 071f847c..28f99b0d 100644 --- a/unknow-server-nio/src/main/java/unknow/server/nio/NIOLoop.java +++ b/unknow-server-nio/src/main/java/unknow/server/nio/NIOLoop.java @@ -99,9 +99,10 @@ public final void run() { } private final void select(long timeout, boolean close) throws IOException, InterruptedException { - if (selector.select(timeout) == 0) - return; + int l = selector.select(timeout); onSelect(close); + if (l == 0) + return; Iterator it = selector.selectedKeys().iterator(); while (it.hasNext()) {