|
@@ -11,6 +11,8 @@ import io.netty.channel.epoll.Epoll;
|
|
import io.netty.channel.epoll.EpollChannelOption;
|
|
import io.netty.channel.epoll.EpollChannelOption;
|
|
import io.netty.channel.epoll.EpollEventLoopGroup;
|
|
import io.netty.channel.epoll.EpollEventLoopGroup;
|
|
import io.netty.channel.epoll.EpollServerSocketChannel;
|
|
import io.netty.channel.epoll.EpollServerSocketChannel;
|
|
|
|
+import io.netty.channel.kqueue.KQueue;
|
|
|
|
+import io.netty.channel.kqueue.KQueueServerSocketChannel;
|
|
import io.netty.channel.nio.NioEventLoopGroup;
|
|
import io.netty.channel.nio.NioEventLoopGroup;
|
|
import io.netty.channel.socket.nio.NioServerSocketChannel;
|
|
import io.netty.channel.socket.nio.NioServerSocketChannel;
|
|
import io.netty.util.ResourceLeakDetector;
|
|
import io.netty.util.ResourceLeakDetector;
|
|
@@ -32,22 +34,24 @@ public class HelloWebServer {
|
|
// Configure the server.
|
|
// Configure the server.
|
|
|
|
|
|
if (Epoll.isAvailable()) {
|
|
if (Epoll.isAvailable()) {
|
|
- doRun(new EpollEventLoopGroup(), EpollServerSocketChannel.class, true);
|
|
|
|
|
|
+ doRun(new EpollEventLoopGroup(), EpollServerSocketChannel.class, IoMultiplexer.EPOLL);
|
|
|
|
+ } else if (KQueue.isAvailable()) {
|
|
|
|
+ doRun(new EpollEventLoopGroup(), KQueueServerSocketChannel.class, IoMultiplexer.KQUEUE);
|
|
} else {
|
|
} else {
|
|
- doRun(new NioEventLoopGroup(), NioServerSocketChannel.class, false);
|
|
|
|
|
|
+ doRun(new NioEventLoopGroup(), NioServerSocketChannel.class, IoMultiplexer.JDK);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- private void doRun(EventLoopGroup loupGroup, Class<? extends ServerChannel> serverChannelClass, boolean isNative) throws InterruptedException {
|
|
|
|
|
|
+ private void doRun(EventLoopGroup loupGroup, Class<? extends ServerChannel> serverChannelClass, IoMultiplexer multiplexer) throws InterruptedException {
|
|
try {
|
|
try {
|
|
InetSocketAddress inet = new InetSocketAddress(port);
|
|
InetSocketAddress inet = new InetSocketAddress(port);
|
|
|
|
|
|
ServerBootstrap b = new ServerBootstrap();
|
|
ServerBootstrap b = new ServerBootstrap();
|
|
|
|
|
|
- if (isNative) {
|
|
|
|
|
|
+ if (multiplexer == IoMultiplexer.EPOLL) {
|
|
b.option(EpollChannelOption.SO_REUSEPORT, true);
|
|
b.option(EpollChannelOption.SO_REUSEPORT, true);
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
b.option(ChannelOption.SO_BACKLOG, 8192);
|
|
b.option(ChannelOption.SO_BACKLOG, 8192);
|
|
b.option(ChannelOption.SO_REUSEADDR, true);
|
|
b.option(ChannelOption.SO_REUSEADDR, true);
|
|
b.group(loupGroup).channel(serverChannelClass).childHandler(new HelloServerInitializer(loupGroup.next()));
|
|
b.group(loupGroup).channel(serverChannelClass).childHandler(new HelloServerInitializer(loupGroup.next()));
|