Browse Source

set SO_REUSEPORT when using epoll

Luis Neves 9 years ago
parent
commit
5becd901c8
1 changed files with 9 additions and 3 deletions
  1. 9 3
      frameworks/Java/netty/src/main/java/hello/HelloWebServer.java

+ 9 - 3
frameworks/Java/netty/src/main/java/hello/HelloWebServer.java

@@ -9,6 +9,7 @@ import io.netty.channel.ChannelOption;
 import io.netty.channel.EventLoopGroup;
 import io.netty.channel.EventLoopGroup;
 import io.netty.channel.ServerChannel;
 import io.netty.channel.ServerChannel;
 import io.netty.channel.epoll.Epoll;
 import io.netty.channel.epoll.Epoll;
+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.nio.NioEventLoopGroup;
 import io.netty.channel.nio.NioEventLoopGroup;
@@ -32,17 +33,22 @@ public class HelloWebServer {
 		// Configure the server.
 		// Configure the server.
 
 
 		if (Epoll.isAvailable()) {
 		if (Epoll.isAvailable()) {
-			doRun(new EpollEventLoopGroup(), EpollServerSocketChannel.class);
+			doRun(new EpollEventLoopGroup(), EpollServerSocketChannel.class, true);
 		} else {
 		} else {
-			doRun(new NioEventLoopGroup(), NioServerSocketChannel.class);
+			doRun(new NioEventLoopGroup(), NioServerSocketChannel.class, false);
 		}
 		}
 	}
 	}
 
 
-	private void doRun(EventLoopGroup loupGroup, Class<? extends ServerChannel> serverChannelClass) throws InterruptedException {
+	private void doRun(EventLoopGroup loupGroup, Class<? extends ServerChannel> serverChannelClass, boolean isNative) throws InterruptedException {
 		try {
 		try {
 			InetSocketAddress inet = new InetSocketAddress(port);
 			InetSocketAddress inet = new InetSocketAddress(port);
 
 
 			ServerBootstrap b = new ServerBootstrap();
 			ServerBootstrap b = new ServerBootstrap();
+
+			if (isNative) {
+				b.option(EpollChannelOption.SO_REUSEPORT, true);
+			}
+
 			b.option(ChannelOption.SO_BACKLOG, 1024);
 			b.option(ChannelOption.SO_BACKLOG, 1024);
 			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()));