diff --git a/src/main/java/org/redkale/net/AsyncConnection.java b/src/main/java/org/redkale/net/AsyncConnection.java index dcbd580a4..c703b5089 100644 --- a/src/main/java/org/redkale/net/AsyncConnection.java +++ b/src/main/java/org/redkale/net/AsyncConnection.java @@ -349,7 +349,7 @@ public abstract class AsyncConnection implements Channel, AutoCloseable { write(buffer, null, handler); } - void write(ByteBuffer src, A attachment, CompletionHandler handler) { + private void write(ByteBuffer src, A attachment, CompletionHandler handler) { if (sslEngine == null) { writeImpl(src, (Consumer) null, attachment, handler); } else { @@ -368,7 +368,7 @@ public abstract class AsyncConnection implements Channel, AutoCloseable { } } - void write( + private void write( ByteBuffer[] srcs, int offset, int length, A attachment, CompletionHandler handler) { if (sslEngine == null) { writeImpl(srcs, offset, length, (Consumer) null, attachment, handler); @@ -388,7 +388,7 @@ public abstract class AsyncConnection implements Channel, AutoCloseable { } } - void write(byte[] bytes, int offset, int length, Object attachment, CompletionHandler handler) { + private void write(byte[] bytes, int offset, int length, Object attachment, CompletionHandler handler) { final ByteBuffer buffer = sslEngine == null ? pollWriteBuffer() : pollWriteSSLBuffer(); if (buffer.remaining() >= length) { buffer.put(bytes, offset, length); diff --git a/src/main/java/org/redkale/net/Transport.java b/src/main/java/org/redkale/net/Transport.java index b6c318c4c..456cbd62a 100644 --- a/src/main/java/org/redkale/net/Transport.java +++ b/src/main/java/org/redkale/net/Transport.java @@ -380,7 +380,7 @@ public final class Transport { factory.getLogger().log(Level.WARNING, Transport.class.getSimpleName() + " async error", ex); return; } - conn.write(buffer, buffer, new CompletionHandler() { + conn.writeInIOThread(buffer, buffer, new CompletionHandler() { @Override public void completed(Integer result, ByteBuffer attachment) { diff --git a/src/main/java/org/redkale/net/TransportFactory.java b/src/main/java/org/redkale/net/TransportFactory.java index eadc0b91d..e02ab24dd 100644 --- a/src/main/java/org/redkale/net/TransportFactory.java +++ b/src/main/java/org/redkale/net/TransportFactory.java @@ -353,8 +353,8 @@ public class TransportFactory { if (node.disabletime < 1) { continue; // 可用 } - CompletableFuture future = - Utility.orTimeout(asyncGroup.createTCPClientConnection(node.address), null, 2, TimeUnit.SECONDS); + CompletableFuture future = Utility.orTimeout( + asyncGroup.createTCPClientConnection(node.address), null, 2, TimeUnit.SECONDS); future.whenComplete((r, t) -> { node.disabletime = t == null ? 0 : System.currentTimeMillis(); if (r != null) { @@ -387,7 +387,7 @@ public class TransportFactory { ByteBuffer sendBuffer = pingBuffer.duplicate(); final AsyncConnection localconn = conn; final BlockingQueue localqueue = queue; - localconn.write(sendBuffer, sendBuffer, new CompletionHandler() { + localconn.writeInIOThread(sendBuffer, sendBuffer, new CompletionHandler() { @Override public void completed(Integer result, ByteBuffer wbuffer) { localconn.read(new CompletionHandler() { diff --git a/src/main/java/org/redkale/net/http/HttpResponse.java b/src/main/java/org/redkale/net/http/HttpResponse.java index 082fa606a..59c337a2a 100644 --- a/src/main/java/org/redkale/net/http/HttpResponse.java +++ b/src/main/java/org/redkale/net/http/HttpResponse.java @@ -1334,23 +1334,22 @@ public class HttpResponse extends Response { } this.addHeader("ETag", etag); createHeader(); - ByteArray data = headerArray; - if (fileBody == null) { + ByteArray headerData = headerArray; + if (fileBody != null) { // 一般HttpResourceServlet缓存file内容时fileBody不为空 + if (start >= 0) { + headerData.put(fileBody, (int) start, (int) ((len > 0) ? len : fileBody.length() - start)); + } + super.finish(false, headerData.content(), 0, headerData.length()); + } else { if (this.recycleListener != null) { this.output = file; } - finishFile(data, file, start, len); - } else { // 一般HttpResourceServlet缓存file内容时fileBody不为空 - if (start >= 0) { - data.put(fileBody, (int) start, (int) ((len > 0) ? len : fileBody.length() - start)); - } - super.finish(false, data.content(), 0, data.length()); + sendFile(headerData, file, start, len); } } // offset、length 为 -1 表示输出整个文件 - private void finishFile(ByteArray headerData, File file, long offset, long length) throws IOException { - // this.channel.write(headerData, new TransferFileHandler(file, offset, length)); + private void sendFile(ByteArray headerData, File file, long offset, long length) throws IOException { final Logger logger = context.getLogger(); this.channel.writeInIOThread(headerData, new CompletionHandler() {