用于UDP的OnMessage()功能



我想知道是否有一种使用DatagramPacket的UDP消息的OnMessage()类型功能?我希望能够确保我得到所有的消息时,他们遇到,所以我不会浪费资源随机抓取计时器。

OnMessage我指的是在WebSocketClient中完成的。或者一些类似于。net中的"Available"的功能。

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);
     }
}

DatagramPacket receive()操作是阻塞的,所以您通常要做的是启动一个单独的线程,它将在循环中侦听传入的数据报,并将它们分派给进一步处理,如下所示:

void run() {
    socket = new DatagramSocket(4445);
    while(true) {
         byte[] buf = new byte[256];
         DatagramPacket packet = new DatagramPacket(buf, buf.length);
         socket.receive(packet); //JVM will wait here, until there is an incoming packet
         onMessage(packet.getData())
    }
 } 
 public abstract void onMessage(final byte[] pkt);    

最新更新