NettyEpollServerAdapter.kt
- package com.hexagonkt.http.server.netty.epoll
- import com.hexagonkt.core.Jvm
- import com.hexagonkt.http.server.HttpServerPort
- import com.hexagonkt.http.server.netty.NettyServerAdapter
- import io.netty.bootstrap.ServerBootstrap
- import io.netty.channel.Channel
- import io.netty.channel.ChannelOption
- import io.netty.channel.MultithreadEventLoopGroup
- import io.netty.channel.epoll.EpollChannelOption
- import io.netty.channel.epoll.EpollEventLoopGroup
- import io.netty.channel.epoll.EpollServerSocketChannel
- /**
- * Implements [HttpServerPort] using Netty Epoll [Channel].
- */
- class NettyEpollServerAdapter(
- bossGroupThreads: Int = 1,
- workerGroupThreads: Int = 0,
- executorThreads: Int = Jvm.cpuCount * 2,
- private val soBacklog: Int = 4 * 1_024,
- private val soReuseAddr: Boolean = true,
- private val soKeepAlive: Boolean = true,
- shutdownQuietSeconds: Long = 0,
- shutdownTimeoutSeconds: Long = 0,
- keepAliveHandler: Boolean = true,
- httpAggregatorHandler: Boolean = true,
- chunkedHandler: Boolean = true,
- enableWebsockets: Boolean = true,
- ) : NettyServerAdapter(
- bossGroupThreads,
- workerGroupThreads,
- executorThreads,
- soBacklog,
- soReuseAddr,
- soKeepAlive,
- shutdownQuietSeconds,
- shutdownTimeoutSeconds,
- keepAliveHandler,
- httpAggregatorHandler,
- chunkedHandler,
- enableWebsockets,
- ) {
- constructor() :
- this(1, 0, Jvm.cpuCount * 2, 4 * 1_024, true, true, 0, 0, true, true, true, true)
- override fun groupSupplier(it: Int): MultithreadEventLoopGroup =
- EpollEventLoopGroup(it)
- override fun serverBootstrapSupplier(
- bossGroup: MultithreadEventLoopGroup,
- workerGroup: MultithreadEventLoopGroup,
- ): ServerBootstrap =
- ServerBootstrap().group(bossGroup, workerGroup)
- .channel(EpollServerSocketChannel::class.java)
- .option(EpollChannelOption.SO_REUSEPORT, true)
- .option(ChannelOption.SO_BACKLOG, soBacklog)
- .option(ChannelOption.SO_REUSEADDR, soReuseAddr)
- .childOption(ChannelOption.SO_KEEPALIVE, soKeepAlive)
- .childOption(ChannelOption.SO_REUSEADDR, soReuseAddr)
- }