北斗定位
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

154 行
5.5KB

  1. package com.telpo.dipperposition.server;
  2. import com.telpo.dipperposition.handler.ServerChannelInitializer;
  3. import com.telpo.dipperposition.service.IDipperDataAsyncTaskService;
  4. import io.netty.bootstrap.ServerBootstrap;
  5. import io.netty.channel.ChannelFuture;
  6. import io.netty.channel.ChannelOption;
  7. import io.netty.channel.EventLoopGroup;
  8. import io.netty.channel.nio.NioEventLoopGroup;
  9. import io.netty.channel.socket.nio.NioServerSocketChannel;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.beans.factory.annotation.Value;
  13. import java.net.InetSocketAddress;
  14. /**
  15. * @program: DipperPositionServer
  16. * @description: 北斗定位
  17. * @author: king
  18. * @create: 2021-01-13 14:01
  19. */
  20. @Slf4j
  21. public class DipperPositionServer {
  22. @Value(value = "${position.server.serverAddr}")
  23. private String serverAddr;
  24. @Value(value = "${position.server.timeAsycPort}")
  25. private String timeAsycServerPort;
  26. @Value(value = "${position.server.posAsycPort}")
  27. private String posAsycServerPort;
  28. @Value(value = "${position.server.starsAsycPort}")
  29. private String starsAsycServerPort;
  30. /*
  31. * 时间同步进程线程
  32. */
  33. public void startTimeAsnc() {
  34. //new 一个主线程组
  35. EventLoopGroup mainThreadGroup = new NioEventLoopGroup(1);
  36. //new 一个工作线程组
  37. EventLoopGroup workThreadGroup = new NioEventLoopGroup(200);
  38. InetSocketAddress socketAddress = new InetSocketAddress(serverAddr, Integer.parseInt(timeAsycServerPort));
  39. ServerBootstrap bootstrap = new ServerBootstrap()
  40. .group(mainThreadGroup, workThreadGroup)
  41. .channel(NioServerSocketChannel.class)
  42. .childHandler(new ServerChannelInitializer())
  43. .localAddress(socketAddress)
  44. //设置队列大小
  45. .option(ChannelOption.SO_BACKLOG, 1024)
  46. // 两小时内没有数据的通信时,TCP会自动发送一个活动探测数据报文
  47. .childOption(ChannelOption.SO_KEEPALIVE, true);
  48. //绑定端口,开始接收进来的连接
  49. try {
  50. ChannelFuture future = bootstrap.bind(socketAddress).sync();
  51. log.info("服务器启动开始监听端口: {}", socketAddress.getPort());
  52. future.channel().closeFuture().sync();
  53. } catch (InterruptedException e) {
  54. e.printStackTrace();
  55. } finally {
  56. //关闭主线程组
  57. mainThreadGroup.shutdownGracefully();
  58. //关闭工作线程组
  59. workThreadGroup.shutdownGracefully();
  60. }
  61. }
  62. /*
  63. * 时间同步进程线程
  64. */
  65. public void startPosAsnc() {
  66. //new 一个主线程组
  67. EventLoopGroup mainThreadGroup = new NioEventLoopGroup(1);
  68. //new 一个工作线程组
  69. EventLoopGroup workThreadGroup = new NioEventLoopGroup(200);
  70. InetSocketAddress socketAddress = new InetSocketAddress(serverAddr, Integer.parseInt(posAsycServerPort));
  71. ServerBootstrap bootstrap = new ServerBootstrap()
  72. .group(mainThreadGroup, workThreadGroup)
  73. .channel(NioServerSocketChannel.class)
  74. .childHandler(new ServerChannelInitializer())
  75. .localAddress(socketAddress)
  76. //设置队列大小
  77. .option(ChannelOption.SO_BACKLOG, 1024)
  78. // 两小时内没有数据的通信时,TCP会自动发送一个活动探测数据报文
  79. .childOption(ChannelOption.SO_KEEPALIVE, true);
  80. //绑定端口,开始接收进来的连接
  81. try {
  82. ChannelFuture future = bootstrap.bind(socketAddress).sync();
  83. log.info("服务器启动开始监听端口: {}", socketAddress.getPort());
  84. future.channel().closeFuture().sync();
  85. } catch (InterruptedException e) {
  86. e.printStackTrace();
  87. } finally {
  88. //关闭主线程组
  89. mainThreadGroup.shutdownGracefully();
  90. //关闭工作线程组
  91. workThreadGroup.shutdownGracefully();
  92. }
  93. }
  94. /*
  95. * 星历同步进程线程
  96. */
  97. public void startStarsAsnc() {
  98. //new 一个主线程组
  99. EventLoopGroup mainThreadGroup = new NioEventLoopGroup(1);
  100. //new 一个工作线程组
  101. EventLoopGroup workThreadGroup = new NioEventLoopGroup(200);
  102. InetSocketAddress socketAddress = new InetSocketAddress(serverAddr, Integer.parseInt(starsAsycServerPort));
  103. ServerBootstrap bootstrap = new ServerBootstrap()
  104. .group(mainThreadGroup, workThreadGroup)
  105. .channel(NioServerSocketChannel.class)
  106. .childHandler(new ServerChannelInitializer())
  107. .localAddress(socketAddress)
  108. //设置队列大小
  109. .option(ChannelOption.SO_BACKLOG, 1024)
  110. // 两小时内没有数据的通信时,TCP会自动发送一个活动探测数据报文
  111. .childOption(ChannelOption.SO_KEEPALIVE, true);
  112. //绑定端口,开始接收进来的连接
  113. try {
  114. ChannelFuture future = bootstrap.bind(socketAddress).sync();
  115. log.info("服务器启动开始监听端口: {}", socketAddress.getPort());
  116. future.channel().closeFuture().sync();
  117. } catch (InterruptedException e) {
  118. e.printStackTrace();
  119. } finally {
  120. //关闭主线程组
  121. mainThreadGroup.shutdownGracefully();
  122. //关闭工作线程组
  123. workThreadGroup.shutdownGracefully();
  124. }
  125. }
  126. }