@@ -25,6 +25,7 @@ import io.netty.channel.ChannelOption
2525import io.netty.channel.EventLoopGroup
2626import io.netty.handler.logging.LogLevel
2727import io.netty.handler.logging.LoggingHandler
28+ import io.netty.util.concurrent.DefaultThreadFactory
2829import kotlinx.coroutines.runBlocking
2930import kotlinx.coroutines.sync.Mutex
3031import kotlinx.coroutines.sync.withLock
@@ -37,6 +38,7 @@ import net.ccbluex.netty.http.util.setup
3738import net.ccbluex.netty.http.websocket.WebSocketController
3839import org.apache.logging.log4j.LogManager
3940import java.net.InetSocketAddress
41+ import java.util.concurrent.ThreadFactory
4042
4143
4244/* *
@@ -75,21 +77,30 @@ class HttpServer {
7577 *
7678 * @param port The port of HTTP server. `0` means to auto select one.
7779 * @param useNativeTransport Whether to use native transport (Epoll or KQueue).
80+ * @param threadFactory The thread factory to use for event loop groups.
81+ * @param loggingHandler The logging handler to use for the server bootstrap.
7882 *
7983 * @return actual port of server.
8084 */
81- suspend fun start (port : Int , useNativeTransport : Boolean = true): Int = lock.withLock {
85+ suspend fun start (
86+ port : Int ,
87+ useNativeTransport : Boolean = true,
88+ threadFactory : ThreadFactory ? = DefaultThreadFactory ("NettyHttpServer "),
89+ loggingHandler : LoggingHandler ? = LoggingHandler (LogLevel .INFO ),
90+ ): Int = lock.withLock {
8291 val b = ServerBootstrap ()
8392
84- val groups = b.setup(useNativeTransport)
93+ val groups = b.setup(useNativeTransport, threadFactory )
8594 bossGroup = groups.first
8695 workerGroup = groups.second
8796
8897 try {
8998 logger.info(" Starting Netty server..." )
9099 b.option(ChannelOption .SO_BACKLOG , 1024 )
91- .handler(LoggingHandler (LogLevel .INFO ))
92- .childHandler(HttpChannelInitializer (this ))
100+ if (loggingHandler != null ) {
101+ b.handler(loggingHandler)
102+ }
103+ b.childHandler(HttpChannelInitializer (this ))
93104 val ch = b.bind(port).syncSuspend().channel()
94105 serverChannel = ch
95106 webSocketController = WebSocketController (ch)
0 commit comments