优化 Web 写入性能

This commit is contained in:
tursom 2019-11-21 16:40:08 +08:00
parent 3993a8af1f
commit 354d2ac46a
2 changed files with 9 additions and 7 deletions

View File

@ -1,6 +1,5 @@
package cn.tursom.web.netty package cn.tursom.web.netty
import cn.tursom.core.buf
import cn.tursom.core.buffer.ByteBuffer import cn.tursom.core.buffer.ByteBuffer
import cn.tursom.web.AdvanceHttpContent import cn.tursom.web.AdvanceHttpContent
import cn.tursom.web.utils.Chunked import cn.tursom.web.utils.Chunked
@ -10,7 +9,6 @@ import io.netty.buffer.Unpooled
import io.netty.channel.ChannelHandlerContext import io.netty.channel.ChannelHandlerContext
import io.netty.handler.codec.http.* import io.netty.handler.codec.http.*
import io.netty.handler.stream.ChunkedFile import io.netty.handler.stream.ChunkedFile
import java.io.ByteArrayOutputStream
import java.io.File import java.io.File
import java.io.RandomAccessFile import java.io.RandomAccessFile
import java.util.* import java.util.*
@ -110,7 +108,9 @@ open class NettyHttpContent(
responseBodyBuf.addComponent(if (buffer is NettyByteBuffer) { responseBodyBuf.addComponent(if (buffer is NettyByteBuffer) {
buffer.byteBuf buffer.byteBuf
} else { } else {
Unpooled.wrappedBuffer(buffer.readBuffer()) val buf = Unpooled.wrappedBuffer(buffer.readBuffer())
buffer.clear()
buf
}) })
} }

View File

@ -1,14 +1,11 @@
package cn.tursom.web package cn.tursom.web
import cn.tursom.core.buf
import cn.tursom.core.buffer.ByteBuffer import cn.tursom.core.buffer.ByteBuffer
import cn.tursom.core.count
import cn.tursom.core.urlDecode import cn.tursom.core.urlDecode
import cn.tursom.web.utils.CacheControl import cn.tursom.web.utils.CacheControl
import cn.tursom.web.utils.Chunked import cn.tursom.web.utils.Chunked
import cn.tursom.web.utils.Cookie import cn.tursom.web.utils.Cookie
import cn.tursom.web.utils.SameSite import cn.tursom.web.utils.SameSite
import java.io.ByteArrayOutputStream
import java.io.File import java.io.File
import java.io.RandomAccessFile import java.io.RandomAccessFile
import java.net.SocketAddress import java.net.SocketAddress
@ -51,7 +48,12 @@ interface HttpContent {
fun finish() fun finish()
fun finish(buffer: ByteArray, offset: Int = 0, size: Int = buffer.size - offset) fun finish(buffer: ByteArray, offset: Int = 0, size: Int = buffer.size - offset)
fun finish(buffer: ByteBuffer) { fun finish(buffer: ByteBuffer) {
finish(buffer.array, buffer.readOffset, buffer.readAllSize()) if (buffer.hasArray) {
finish(buffer.array, buffer.readOffset, buffer.readAllSize())
} else {
write(buffer)
finish()
}
buffer.close() buffer.close()
} }