深入浅出Redis-redis哨兵集群.doc
文本预览下载声明
深入浅出Redis-redis哨兵集群
源码设计
接收器Acceptor
/**
*
* @author seaboat
* @date 2016-08-25
* @version 1.0
* prebemail: /b849586227@/pre
* prebblog: /b/wangyangzhizhou/pre
* pThis Acceptor provides a NIO mode to accept client sockets./p
*/
public final class Acceptor extends Thread {
private static final Logger LOGGER = LoggerFactory
.getLogger(Acceptor.class);
private final int port;
private final Selector selector;
private final ServerSocketChannel serverChannel;
private long acceptCount;
private static final AcceptIdGenerator IdGenerator = new AcceptIdGenerator();
private ReactorPool reactorPool;
public Acceptor(ReactorPool reactorPool, String name, String bindIp,
int port) throws IOException {
super.setName(name);
this.port = port;
this.selector = Selector.open();
this.serverChannel = ServerSocketChannel.open();
this.serverChannel.configureBlocking(false);
this.serverChannel.setOption(StandardSocketOptions.SO_REUSEADDR, true);
this.serverChannel.setOption(StandardSocketOptions.SO_RCVBUF, 1024);
this.serverChannel.bind(new InetSocketAddress(bindIp, port), 100);
this.serverChannel.register(selector, SelectionKey.OP_ACCEPT);
this.reactorPool = reactorPool;
}
public int getPort() {
return port;
}
public long getAcceptCount() {
return acceptCount;
}
@Override
public void run() {
final Selector selector = this.selector;
for (;;) {
++acceptCount;
try {
selector.select(1000L);
SetSelectionKey keys = selector.selectedKeys();
try {
for (SelectionKey key : keys) {
if (key.isValid() key.isAcceptable()) {
accept();
} else {
key.cancel();
}
}
显示全部