2009-08-21 14 views
1

J'ai un programme PC qui reçoit des données de 20 boîtes matérielles personnalisées via UDP. Chacune de ces boîtes envoie continuellement des messages UDP à une seule prise UDP sur le PC. Les messages contiennent tous 10 à 150 octets de données et chaque unité envoie environ 20 messages en 12 secondes.Amélioration du traitement des messages UDP

Les tests montrent que certains messages sont manqués par le PC. Moins de boîtes sur le réseau entraîne moins de messages manqués. La solution à long terme consiste à tamponner les données dans le matériel et laisser le PC récupérer les données requises via TCP, mais j'ai besoin de résoudre/minimiser le problème de message manquant à court terme jusqu'à ce que cette solution puisse être déployée. Idées: - mise à niveau du PC - filtrer les messages inutiles avant la transmission - combinant des messages UDP séparés dans le matériel en un seul plus gros - à l'aide de prises multiples dans le PC pour recevoir des messages

Je cherche commentaires sur ces idées, plus tout ce que nous aurions pu manquer.

Le programme de réception est un programme C++ Builder exécutant Indy9.

Répondre

0

Merci aux autres gars pour des suggestions, mais pour tout le monde référant, la solution ici remplaçait l'ancien PC qui avait été utilisé (1.6GHz Celeron avec 512 Mo de RAM) avec la machine de spécification correcte (2GHz Core 2 avec 2 Go de RAM).

1

Les messages supprimés dans UDP sont liés à la congestion NET sur votre réseau. Il n'a rien à faire si vous utilisez 1 ou 5 sockets pour recevoir les paquets.

De plus, si vous avez seulement 20 boîtes, envoyez 20 messages en 12 secondes. Cela signifierait seulement 33 messages par seconde. C'est vraiment des cacahuètes ... pour le réseau, ainsi que pour le processeur. Donc, la seule raison pour laquelle les paquets sont abandonnés est qu'il y a beaucoup d'autres charges réseau en cours. Les cartes réseau et les routeurs ont tendance à préférer les paquets tcp-ip au-dessus d'udp.

S'il n'y a pas de charge réseau excessive, les packages UDP ne doivent pas être supprimés.

+0

Il n'y a pas d'autre trafic sur le réseau - c'est un réseau privé. Je suis d'accord pour dire que la charge du réseau n'est pas élevée - bien qu'elle soit 'éclatée', avec un paquet de 12 messages envoyés sur la limite des 12s. Ma conjecture est que les éclats de messages de plusieurs boîtes se produisent ensemble, et ne pas être vu par le PC en conséquence. – IanH

+0

Ma conjecture est qu'ils ne sont pas (il serait très difficile de synchroniser cela). J'étudierais les paramètres réseau, les commutateurs/concentrateurs, etc. Sur quel type de plate-forme ces machines fonctionnent-elles? – Toad

+0

Ces boîtes sont personnalisées, exécutant la pile LWiP. Les seuls autres périphériques sur le réseau sont le commutateur (non géré 10/100) et le PC. La synchronisation peut être un artefact de l'allumage simultané des 20 boîtes. – IanH

1

Le problème le plus probable est sur le réseau.

Vous avez déjà dit que le réseau est un LAN privé, ce qui élimine l'une de mes suggestions, l'autre est de s'assurer que le réseau est activé - un concentrateur pourrait facilement perdre des paquets.

Si cela ne vous aide pas, vous pouvez essayer d'augmenter la taille du tampon de réception sur le PC. http://www.developerweb.net/forum/showthread.php?t=5773

+0

Le réseau est définitivement activé. Étudiera la taille du tampon rx. – IanH