接口需求:开发一个UDP协议的接口作为服务端接收来自客户端的认证数据,数据量每分钟7w+条;
数据格式:标准的redius协议,redius协议的相关知识在网上查资料,提供线索:http://blog.sina.com.cn/s/blog_5fc93bc00102w9dr.html
问题:接口在启动一段时间过后收不到数据,程序出现假死现象,检查发现日志没有抛任何异常、进程也任然存在,添加各种日志调试程序,经过测试发现是数据处理速度上的问题,导致主机资源不够,添加线程后解决问题。
#修改代码如下:
private void init(int port) { try { // 获取本机上的网络接口对象 DatagramSocket ds = new DatagramSocket(port); System.out.println("等待客户端数据……"); Map<String, String> dataMap ; DatagramPacket dp; while (true) { try { byte[] buf = new byte[256]; dp = new DatagramPacket(buf, buf.length);//重置内部长度 ds.receive(dp);// 阻塞式的 byte[] data = Arrays.copyOfRange(dp.getData(), 0,dp.getData().length);
new ServerThread(data);//启用线程处理接收到的数据 } catch (Exception e) { e.printStackTrace(); } } } catch (Exception ef) { ef.printStackTrace(); } } class ServerThread extends Thread { private byte[] data; public ServerThread(byte[] data) { this.data = data; start(); } public void run() { try { radius.radiusType(data);//redius报文解析 } catch (Exception e) { e.printStackTrace(); } } }