如何加快Java DatagramSocket的性能?

LPa*_*mer 3 java sockets

我正在使用Java DatagramSocket类将UDP数据报文发送到端点.数据报必须以60ms的间隔到达端点.

我发现DatagramSocket.Send通常需要> 1 ms(接近2)才能打包并发送不超过56个字节的数据包.这导致我的数据包以62 ms的间隔传送,而不是60 ms.

这是在Windows Vista机器上.以下是我测量时间的方法:

              DatagramPacket d = new DatagramPacket(out, out.length, address, port);
              long nanoTime = System.nanoTime();
    socket.send(d);
    long diff = System.nanoTime() - nanoTime;
    System.out.println( out.length + " in " + diff + "ms." );
Run Code Online (Sandbox Code Playgroud)

有没有人有提示或技巧来加速这个过程?

Jam*_*uis 6

您可以使用Timer类来安排事件.

    Timer timer = new Timer();
    TimerTask task = new TimerTask() {
        public void run() {
            //send packet here
        }};
    timer.scheduleAtFixedRate(task, 0, 60);
Run Code Online (Sandbox Code Playgroud)

这将每隔60ms创建一个重复发生的事件来执行"run"命令.在所有事情保持相同的情况下,数据包应该每60分钟接通一次(虽然,第一个数据包将延迟一些数量,垃圾收集/其他任务/等可能会稍微延迟这个数字).