文档详情

深入浅出Redis-redis哨兵集群.doc

发布:2017-12-15约1.3万字共10页下载文档
文本预览下载声明
深入浅出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(); } }
显示全部
相似文档