Ich habe ein PC-Programm, das Daten von 20 benutzerdefinierten Hardware-Boxen über UDP empfängt. Jedes dieser Felder sendet kontinuierlich UDP-Nachrichten an einen einzelnen UDP-Socket auf dem PC. Die Nachrichten enthalten alle 10 bis 150 Byte Daten und jede Einheit sendet in 20 Sekunden etwa 20 Nachrichten.Verbesserung der UDP-Nachrichtenbehandlung
Tests zeigen, dass einige Meldungen vom PC verpasst werden. Weniger Felder im Netzwerk führen zu weniger verpassten Nachrichten. Die langfristige Lösung besteht darin, Daten in der Hardware zu puffern und den PC nach Bedarf über TCP abrufen zu lassen, aber ich muss das Problem mit fehlenden Nachrichten kurzfristig lösen/minimieren, bis diese Lösung bereitgestellt werden kann. Ideen sind: - Upgrade der PC - Ausfiltern nicht mehr benötigte Nachrichten vor der Übertragung - die Kombination von separaten UDP-Nachrichten in der Hardware in ein einzigen größeren - mehrere Steckdosen in dem PC verwenden, um Nachrichten zu empfangen
Ich suche Feedback zu diesen Ideen sowie zu allen anderen, die wir übersehen haben könnten.
Das empfangende Programm ist ein C++ Builder-Programm, auf dem Indy9 ausgeführt wird.
Es gibt keinen anderen Verkehr im Netzwerk - es ist ein privates LAN. Ich stimme zu, dass die Netzwerklast nicht hoch ist - obwohl es "stoßweise" ist, mit einem Bündel von 12 Nachrichten an der Grenze 12s gesendet. Meine Vermutung ist, dass Nachrichtenbursts aus mehreren Boxen zusammen auftreten und dadurch vom PC nicht gesehen werden. – IanH
Meine Vermutung ist, dass sie nicht (es wäre sehr schwierig, dies zu synchronisieren). Ich würde Netzwerkeinstellungen, Switches/Hubs usw. untersuchen. Auf welcher Art von Plattform laufen diese Maschinen? – Toad
Diese Felder sind benutzerdefinierte Hardware, auf denen der LWiP-Stapel ausgeführt wird. Die einzigen anderen Geräte im Netzwerk sind der Switch (unmanaged 10/100) und der PC. Die Synchronisierung kann ein Artefakt des gleichzeitigen Einschaltens der 20 Boxen sein. – IanH