Browse Source

Epoll support added. #145

master
Nikita 11 years ago
parent
commit
6db9b38d74
  1. 5
      pom.xml
  2. 23
      src/main/java/com/corundumstudio/socketio/Configuration.java
  3. 19
      src/main/java/com/corundumstudio/socketio/SocketIOServer.java

5
pom.xml

@ -125,6 +125,11 @@
<artifactId>netty-codec</artifactId>
<version>4.0.23.Final</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-transport-native-epoll</artifactId>
<version>4.0.23.Final</version>
</dependency>
<dependency>
<groupId>com.googlecode.jmockit</groupId>

23
src/main/java/com/corundumstudio/socketio/Configuration.java

@ -37,6 +37,7 @@ public class Configuration {
private int bossThreads = 0; // 0 = current_processors_amount * 2
private int workerThreads = 0; // 0 = current_processors_amount * 2
private boolean useLinuxNativeEpoll;
private boolean allowCustomRequests = false;
@ -74,7 +75,7 @@ public class Configuration {
private boolean addVersionHeader = true;
private String origin;
public Configuration() {
}
@ -86,6 +87,7 @@ public class Configuration {
Configuration(Configuration conf) {
setBossThreads(conf.getBossThreads());
setWorkerThreads(conf.getWorkerThreads());
setUseLinuxNativeEpoll(conf.isUseLinuxNativeEpoll());
setPingInterval(conf.getPingInterval());
setPingTimeout(conf.getPingTimeout());
@ -116,7 +118,7 @@ public class Configuration {
setAckMode(conf.getAckMode());
setMaxFramePayloadLength(conf.getMaxFramePayloadLength());
setUpgradeTimeout(conf.getUpgradeTimeout());
setAddVersionHeader(conf.isAddVersionHeader());
setOrigin(conf.getOrigin());
}
@ -433,7 +435,7 @@ public class Configuration {
/**
* Transport upgrade timeout in milliseconds
*
*
* @param upgradeTimeout
*/
public void setUpgradeTimeout(int upgradeTimeout) {
@ -446,7 +448,7 @@ public class Configuration {
/**
* Adds <b>Server</b> header with lib version to http response.
* Default is <code>true</code>
*
*
* @param addVersionHeader
*/
public void setAddVersionHeader(boolean addVersionHeader) {
@ -458,7 +460,7 @@ public class Configuration {
/**
* Set <b>Access-Control-Allow-Origin</b> header value for http each
* response.
* response.
* Default is <code>null</code>
*
* If value is <code>null</code> then request <b>ORIGIN</b> header value used.
@ -470,6 +472,13 @@ public class Configuration {
}
public String getOrigin() {
return origin;
}
}
public boolean isUseLinuxNativeEpoll() {
return useLinuxNativeEpoll;
}
public void setUseLinuxNativeEpoll(boolean useLinuxNativeEpoll) {
this.useLinuxNativeEpoll = useLinuxNativeEpoll;
}
}

19
src/main/java/com/corundumstudio/socketio/SocketIOServer.java

@ -19,6 +19,8 @@ import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.FixedRecvByteBufAllocator;
import io.netty.channel.epoll.EpollEventLoopGroup;
import io.netty.channel.epoll.EpollServerSocketChannel;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.util.concurrent.Future;
@ -128,9 +130,15 @@ public class SocketIOServer implements ClientListeners {
initGroups();
pipelineFactory.start(configCopy, namespacesHub);
Class channelClass = NioServerSocketChannel.class;
if (configCopy.isUseLinuxNativeEpoll()) {
channelClass = EpollServerSocketChannel.class;
}
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.channel(channelClass)
.childHandler(pipelineFactory);
applyConnectionOptions(b);
@ -169,8 +177,13 @@ public class SocketIOServer implements ClientListeners {
}
protected void initGroups() {
bossGroup = new NioEventLoopGroup(configCopy.getBossThreads());
workerGroup = new NioEventLoopGroup(configCopy.getWorkerThreads());
if (configCopy.isUseLinuxNativeEpoll()) {
bossGroup = new EpollEventLoopGroup(configCopy.getBossThreads());
workerGroup = new EpollEventLoopGroup(configCopy.getWorkerThreads());
} else {
bossGroup = new NioEventLoopGroup(configCopy.getBossThreads());
workerGroup = new NioEventLoopGroup(configCopy.getWorkerThreads());
}
}
/**

Loading…
Cancel
Save