Мне было интересно, существует ли тип функций OnMessage() для сообщений UDP с использованием DatagramPacket? Я хочу быть в состоянии обеспечить, чтобы я получал все сообщения, когда они сталкивались, поэтому я не трачу ресурсы, случайно захватывающие таймер.Функция OnMessage() для UDP
OnMessage Я имею в виду то, что сделано в WebSocketClient. Или некоторые функции, похожие на «Доступные» в .net.
While (rxUdpClient.Available > 0)
Я отслеживаю несколько портов, поэтому вызывается поток, который будет выполнять run() для каждого порта. Проблема в том, что у меня, кажется, есть сообщения, поступающие со скоростью 40 +/сек.
Это то, что я в настоящее время:
public void run()
{
DatagramSocket sock = null;
sock = new DatagramSocket(port);
byte[] buffer = new byte[DataAdapterFB1.HEADER_SIZE + DataAdapterFB1.MAX_DATA_BYTES];
DatagramPacket incoming = new DatagramPacket(buffer, buffer.length);
while (true){
sock.receive(incoming);
byte[] data = incoming.getData();
String s = new String(data, 0, incoming.getLength());
//This is the processing code, but it isn't its own thread...
ScadaMsg newMessage = new ScadaMsg(data);
}
}
Просмотреть правки для OP. – Tacitus86
Тогда вы должны быть настроены, так как socket.receive() сделает JVM подписаться на сокет ОС и получит данные после его поступления. Не задействован таймер, и никаких ресурсов «нет». – zeppelin
Проблема в том, что я, кажется, не хватает пакетов. Они идут слишком быстро или что-то в этом роде? – Tacitus86