ServerBootstrapFactory.java 1.6 KB

1234567891011121314151617181920212223242526272829303132
  1. package com.tsi.app.common.xnet;
  2. import io.netty.bootstrap.ServerBootstrap;
  3. import io.netty.channel.*;
  4. public class ServerBootstrapFactory {
  5. public static ServerBootstrap createBootstrap(NettyServerConfig config, ChannelInitializer<Channel> channelInitializer) throws Exception {
  6. ServerBootstrap serverBootstrap = new ServerBootstrap();
  7. EventLoopGroup acceptGroups;
  8. EventLoopGroup workerGroups;
  9. acceptGroups = NettyUtils.newEventLoopGroup(config.getAcceptThreads(), "Accept");
  10. workerGroups = NettyUtils.newEventLoopGroup(config.getWorkerThreads(), "Worker");
  11. serverBootstrap.channel(NettyUtils.getServerSocketChannel());
  12. serverBootstrap.group(acceptGroups, workerGroups);
  13. serverBootstrap.option(ChannelOption.AUTO_READ, true);
  14. serverBootstrap.option(ChannelOption.SO_BACKLOG, config.getBacklog());
  15. serverBootstrap.option(ChannelOption.SO_RCVBUF, config.getRcvBuf());
  16. serverBootstrap.option(ChannelOption.SO_REUSEADDR, true);
  17. serverBootstrap.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, config.getConnectTimeoutSeconds()*1000);
  18. serverBootstrap.childOption(ChannelOption.SO_LINGER, 0); // 4way-handshake 비활성
  19. serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, false); // KEEPALIVE 비활성(활성: true)
  20. serverBootstrap.childOption(ChannelOption.SO_REUSEADDR, true); // 소켓 재사용
  21. serverBootstrap.childOption(ChannelOption.TCP_NODELAY, true); // Nagle 알고리즘 비활성화
  22. serverBootstrap.childHandler((ChannelHandler)channelInitializer);
  23. return serverBootstrap;
  24. }
  25. }