// 初始化类
@Component
public class UDPListener implements ServletContextListener {
private static final int MAX_UDP_SIZE = 4096;
private static final int UDP_PORT = 9527;
DatagramSocket socket = null;
DatagramPacket packet = null;
@Resource
private ThreadListenerService threadListenerService;
@Override
public void contextInitialized(ServletContextEvent sce) {
threadListenerService.udpProcess(MAX_UDP_SIZE, UDP_PORT, socket, packet);
}
}
// 线程类
@Service
public class ThreadListenerService {
public static final Logger logger = LoggerFactory.getLogger(ThreadListenerService.class);
@Async("asyncServiceExecutor")
public void udpProcess(int MAX_UDP_SIZE, int UDP_PORT, DatagramSocket socket, DatagramPacket packet) {
logger.info("======= 启动线程,创建UDP实时数据监听服务 ===========");
try {
socket = new DatagramSocket(UDP_PORT);
logger.info("======= UDP服务创建完成 ===========");
while (true) {
byte[] buffer = new byte[MAX_UDP_SIZE];
packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
process(packet);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Async("asyncServiceExecutor")
public void process(DatagramPacket packet) {
byte[] buffer = packet.getData();
String str = null;
try {
str = new String(buffer, "UTF-8").trim();
logger.info("location data is received:{}", str);
//TODO 数据处理
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}