Skip to content

Commit 782f365

Browse files
committed
Merge pull request AsyncHttpClient#902 from sschepens/epoll
Make SocketChannel and EventLoopGroup configurable
2 parents 281cd4e + 16997aa commit 782f365

File tree

2 files changed

+21
-6
lines changed

2 files changed

+21
-6
lines changed

providers/netty4/src/main/java/org/asynchttpclient/netty/NettyAsyncHttpProviderConfig.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,8 @@ public NettyWebSocket newNettyWebSocket(Channel channel, AsyncHttpClientConfig c
132132
*/
133133
private EventLoopGroup eventLoopGroup;
134134

135+
private Class<? extends Channel> socketChannelClass;
136+
135137
private AdditionalPipelineInitializer httpAdditionalPipelineInitializer;
136138
private AdditionalPipelineInitializer wsAdditionalPipelineInitializer;
137139
private AdditionalPipelineInitializer httpsAdditionalPipelineInitializer;
@@ -155,6 +157,14 @@ public void setEventLoopGroup(EventLoopGroup eventLoopGroup) {
155157
this.eventLoopGroup = eventLoopGroup;
156158
}
157159

160+
public Class<? extends Channel> getSocketChannelClass() {
161+
return socketChannelClass;
162+
}
163+
164+
public void setSocketChannelClass(Class<? extends Channel> socketChannelClass) {
165+
this.socketChannelClass = socketChannelClass;
166+
}
167+
158168
public AdditionalPipelineInitializer getHttpAdditionalPipelineInitializer() {
159169
return httpAdditionalPipelineInitializer;
160170
}

providers/netty4/src/main/java/org/asynchttpclient/netty/channel/ChannelManager.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import io.netty.channel.EventLoopGroup;
2626
import io.netty.channel.group.ChannelGroup;
2727
import io.netty.channel.nio.NioEventLoopGroup;
28+
import io.netty.channel.oio.OioEventLoopGroup;
2829
import io.netty.channel.socket.nio.NioSocketChannel;
2930
import io.netty.handler.codec.http.HttpClientCodec;
3031
import io.netty.handler.codec.http.HttpContentDecompressor;
@@ -82,6 +83,7 @@ public class ChannelManager {
8283
private final SSLEngineFactory sslEngineFactory;
8384
private final EventLoopGroup eventLoopGroup;
8485
private final boolean allowReleaseEventLoopGroup;
86+
private final Class<? extends Channel> socketChannelClass;
8587
private final Bootstrap plainBootstrap;
8688
private final Bootstrap secureBootstrap;
8789
private final Bootstrap webSocketBootstrap;
@@ -167,13 +169,16 @@ public Semaphore apply(Object partitionKey) {
167169
// check if external EventLoopGroup is defined
168170
allowReleaseEventLoopGroup = nettyConfig.getEventLoopGroup() == null;
169171
eventLoopGroup = allowReleaseEventLoopGroup ? new NioEventLoopGroup() : nettyConfig.getEventLoopGroup();
170-
if (!(eventLoopGroup instanceof NioEventLoopGroup))
171-
throw new IllegalArgumentException("Only Nio is supported");
172+
if (eventLoopGroup instanceof OioEventLoopGroup)
173+
throw new IllegalArgumentException("Oio is not supported");
172174

173-
plainBootstrap = new Bootstrap().channel(NioSocketChannel.class).group(eventLoopGroup);
174-
secureBootstrap = new Bootstrap().channel(NioSocketChannel.class).group(eventLoopGroup);
175-
webSocketBootstrap = new Bootstrap().channel(NioSocketChannel.class).group(eventLoopGroup);
176-
secureWebSocketBootstrap = new Bootstrap().channel(NioSocketChannel.class).group(eventLoopGroup);
175+
// allow users to specify SocketChannel class and default to NioSocketChannel
176+
socketChannelClass = nettyConfig.getSocketChannelClass() == null ? NioSocketChannel.class : nettyConfig.getSocketChannelClass();
177+
178+
plainBootstrap = new Bootstrap().channel(socketChannelClass).group(eventLoopGroup);
179+
secureBootstrap = new Bootstrap().channel(socketChannelClass).group(eventLoopGroup);
180+
webSocketBootstrap = new Bootstrap().channel(socketChannelClass).group(eventLoopGroup);
181+
secureWebSocketBootstrap = new Bootstrap().channel(socketChannelClass).group(eventLoopGroup);
177182

178183
if (config.getConnectTimeout() > 0)
179184
nettyConfig.addChannelOption(ChannelOption.CONNECT_TIMEOUT_MILLIS, config.getConnectTimeout());

0 commit comments

Comments
 (0)