2009-08-21 12 views
1

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.

Antwort

0

Dank die anderen Jungs für Vorschläge, aber für jeden Bezug zurück, hier die Lösung wurde den alten PC ersetzen, die (1,6 GHz Celeron mit 512 MB RAM) mit der richtigen spec Maschine verwendet worden (2GHz Core 2 Prozessor mit 2GB RAM).

1

gelöschte Nachrichten in UDP haben mit der NET-Überlastung in Ihrem Netzwerk zu tun. Es hat nichts zu tun, wenn Sie 1 oder 5 Sockets verwenden, um die Pakete zu empfangen.

Wenn Sie nur 20 Boxen haben, senden Sie 20 Nachrichten in 12 Sekunden. Dies würde nur 33 Nachrichten pro Sekunde bedeuten. Das ist wirklich Peanuts ... für das Netzwerk, sowie den Prozessor.

Der einzige Grund, warum Pakete fallen gelassen werden, ist, dass es viel andere Netzwerklast gibt. Netzwerkkarten und Router neigen dazu, tcp-ip-Pakete über UDP vorzuziehen.

Wenn keine übermäßige Netzwerkbelastung auftritt, sollten UDP-Pakete nicht gelöscht werden.

+0

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

+0

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

+0

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

1

Das wahrscheinlichste Problem liegt im Netzwerk.

Sie haben bereits gesagt, das Netzwerk ist private LAN, die einen meiner Vorschläge beseitigt, der andere ist, um sicherzustellen, dass das Netzwerk geschaltet wird - ein Hub könnte leicht Pakete verlieren.

Wenn das nicht hilft, dann könnten Sie versuchen, die Empfangspuffergröße auf dem PC zu erhöhen. http://www.developerweb.net/forum/showthread.php?t=5773

+0

Das Netzwerk ist definitiv geschaltet. Untersucht die Größe des RX-Puffers. – IanH

Verwandte Themen