SocketServer.java 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package cn.com.zyjblogs.chat.netty;
  2. import io.netty.bootstrap.ServerBootstrap;
  3. import io.netty.channel.ChannelFuture;
  4. import io.netty.channel.nio.NioEventLoopGroup;
  5. import io.netty.channel.socket.nio.NioServerSocketChannel;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.springframework.beans.factory.annotation.Value;
  8. import org.springframework.stereotype.Service;
  9. import javax.annotation.Resource;
  10. import java.io.Closeable;
  11. /**
  12. * @author Gjing
  13. **/
  14. @Slf4j
  15. @Service
  16. public class SocketServer implements Runnable, Closeable {
  17. @Resource
  18. private SocketInitializer socketInitializer;
  19. /**
  20. * netty服务监听端口
  21. */
  22. @Value("${spring.netty.port:8808}")
  23. private int port;
  24. /**
  25. * 主线程组数量
  26. */
  27. @Value("${spring.netty.bossThread:1}")
  28. private int bossThread;
  29. private ServerBootstrap serverBootstrap = new ServerBootstrap();
  30. // 创建两个线程组,bossGroup为接收请求的线程组,一般1-2个就行
  31. private NioEventLoopGroup bossGroup = new NioEventLoopGroup(this.bossThread);
  32. // 实际工作的线程组
  33. private NioEventLoopGroup workerGroup = new NioEventLoopGroup();
  34. /**
  35. * 初始化netty配置
  36. */
  37. private void init() {
  38. this.serverBootstrap.group(bossGroup, workerGroup) // 两个线程组加入进来
  39. .channel(NioServerSocketChannel.class) // 配置为nio类型
  40. .childHandler(this.socketInitializer); // 加入自己的初始化器
  41. //对关闭通道进行监听
  42. ChannelFuture cf = this.serverBootstrap.bind(this.port);
  43. //对关闭通道进行监听
  44. try {
  45. cf.channel().closeFuture().sync();
  46. } catch (InterruptedException e) {
  47. }
  48. }
  49. /**
  50. * 启动netty服务器
  51. */
  52. @Override
  53. public void run() {
  54. init();
  55. }
  56. @Override
  57. public void close() {
  58. //优雅关闭
  59. log.info("netty closing");
  60. bossGroup.shutdownGracefully();
  61. workerGroup.shutdownGracefully();
  62. log.info("netty close");
  63. }
  64. }