|
25 | 25 | import io.netty.channel.EventLoopGroup;
|
26 | 26 | import io.netty.channel.group.ChannelGroup;
|
27 | 27 | import io.netty.channel.nio.NioEventLoopGroup;
|
| 28 | +import io.netty.channel.oio.OioEventLoopGroup; |
28 | 29 | import io.netty.channel.socket.nio.NioSocketChannel;
|
29 | 30 | import io.netty.handler.codec.http.HttpClientCodec;
|
30 | 31 | import io.netty.handler.codec.http.HttpContentDecompressor;
|
@@ -82,6 +83,7 @@ public class ChannelManager {
|
82 | 83 | private final SSLEngineFactory sslEngineFactory;
|
83 | 84 | private final EventLoopGroup eventLoopGroup;
|
84 | 85 | private final boolean allowReleaseEventLoopGroup;
|
| 86 | + private final Class<? extends Channel> socketChannelClass; |
85 | 87 | private final Bootstrap plainBootstrap;
|
86 | 88 | private final Bootstrap secureBootstrap;
|
87 | 89 | private final Bootstrap webSocketBootstrap;
|
@@ -167,13 +169,16 @@ public Semaphore apply(Object partitionKey) {
|
167 | 169 | // check if external EventLoopGroup is defined
|
168 | 170 | allowReleaseEventLoopGroup = nettyConfig.getEventLoopGroup() == null;
|
169 | 171 | 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"); |
172 | 174 |
|
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); |
177 | 182 |
|
178 | 183 | if (config.getConnectTimeout() > 0)
|
179 | 184 | nettyConfig.addChannelOption(ChannelOption.CONNECT_TIMEOUT_MILLIS, config.getConnectTimeout());
|
|
0 commit comments