Java Отправка короткой строки через сокет на высокой частоте - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь создать приложение для управления каналами DMX.Для этого у меня есть ESP8266, который принимает строку как «2.255», где первое целое число является каналом DMX, а второе целое значение.

Для моего ПК я написал метод, который сначала строитстроку и затем отправьте его на IP-адрес ESP8266 через сокет.

for(DMXChannel c : list){
if(lastvalue.get(c.getChannelID() - 1) != c.getValue()){

     try {
            String msg = c.getChannelID() + "." + c.getValue();;
            DatagramSocket clientSocket = new DatagramSocket();

            InetAddress ipaddr = InetAddress.getByName(ip); //IP Address is "192.168.4.1"

            byte[] sendData = new byte[1024];
            sendData = msg.getBytes();
            DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, ipaddr, 8888);

            clientSocket.send(sendPacket);
            clientSocket.close();
            } catch (Exception e) {
                e.printStackTrace();
            }

     }
}

Это работает нормально, но у меня проблема, когда я пытаюсь сделать затухание.Частота этого фрагмента кода кажется слишком медленной.

У кого-нибудь есть "более быстрое" решение?

1 Ответ

0 голосов
/ 26 ноября 2018

Вот несколько вещей, которые вы могли бы сделать, чтобы ускорить код:

  1. Не звоните getByName для получения IP-адреса.Это включает DNS, но DNS не требуется для IP-адреса.Вместо этого позвоните getByAddress.Если вам нужно вызвать getByName, вызовите его только один раз и кешируйте ответ.

  2. Не открывайте, не закрывайте, не открывайте и т. Д. Каждый раз сокет.Просто держи его открытым.

...