Bir süre döngüsünde UDP paketlerini dinlediğim bir yöntem var. Paketleri, geldikleri farklı bir sınıfta başka bir yöntem kullanarak ayrıştırmak ve uygulamanın her bir parçasında, her bir paketin farklı ayrıştırma ve analizlerini yapmak istiyorum. PacketParser
yöntemlerinin, döngünün dışındaki Kuyruğu işlemesinin daha iyi olacağını düşünüyorum. Paketleri geldikçe Queue
'a ekleyebilmemiz ve uygulamanın başka bir parçasının Kuyruğa geldikçe öğeleri dinleyebilmeleri ve döngüleri paket dinlemeye devam ederken orijinal olarak diğer eylemleri gerçekleştirmeleri mümkün olacaktır. kuyruk? Sırasıyla başka bir işleve sahip olmak ve paketleri işlemek istiyorum, Queue
veya Stack
'u izlemek için Java
'da bir şey var mı? Bunu yapmanın daha iyi bir yolu var mı?Öğeler bir süre döngüsüne eklendikçe sıradaki öğeler Öğe
public void read(String multicastIpAddress, int multicastPortNumber) {
PacketParser parser = new PacketParser(logger);
InetAddress multicastAddress = null;
MulticastSocket multicastSocket = null;
final int PortNumber = multicastPortNumber;
try {
multicastAddress = InetAddress.getByName(multicastIpAddress);
multicastSocket = new MulticastSocket(PortNumber);
String hostname = InetAddress.getLocalHost().getHostName();
byte[] buffer = new byte[8192];
multicastSocket.joinGroup(multicastAddress);
System.out.println("Listening from " + hostname + " at " + multicastAddress.getHostName());
int numberOfPackets = 0;
while (true) {
numberOfPackets++;
DatagramPacket datagramPacket = new DatagramPacket(buffer, buffer.length);
multicastSocket.receive(datagramPacket);
// add to queue for another function to process the packets
}
} catch (SocketException socketException) {
System.out.println("Socket exception " + socketException);
} catch (IOException exception) {
System.out.println("Exception " + exception);
} finally {
if (multicastSocket != null) {
try {
multicastSocket.leaveGroup(multicastAddress);
multicastSocket.close();
} catch (IOException exception) {
System.out.println(exception.toString());
}
}
}
}
Ben sadece kod üzerinden yağsız ve sonsuz döngü var gibi görünüyor. Belki "çok iş parçacığı" veya "olay işleme" yi deneyin? –
Birden çok iş parçacığına bakmanızı öneriyorum: bir üretici-tüketici modeli kullanın ve iş parçacığı güvenliği için kuyrukları engelleyin. – Krease
@Chris Bir üretici-tüketici modelini hiç duymadım, daha çok bakacağım, bunu biraz açıklayan temel bir yazı buldum ve II bu modelin denediğime ulaşmasına yardımcı olacağını düşünüyorum. yapmak, teşekkürler! https://dzone.com/articles/producer-consumer-pattern –