2010-03-28 26 views
11

Je développe une interface java entre un serveur de streaming et un client flash. J'ai remarqué que les datagrammes UDP peuvent atteindre mon interface dans le désordre même si les deux processus s'exécutent localement.Pourquoi les datagrammes UDP sont-ils désactivés même avec des processus s'exécutant localement?

Est-ce normal? Je pensais que comme aucun datagramme ne doit passer par un routeur ou un périphérique réseau, cela ne devrait pas se produire.

+1

C'est une bonne question, je suis également intéressé par les causes possibles de ce problème. –

Répondre

7

Actuellement, il n'y a aucune garantie de commande et de réception des paquets UDP, même s'ils sont envoyés par localhost sur localhost. Juste parce que la spécification du protocole n'implique rien à ce sujet.

Puisque vous ne pouvez pas faire des hypothèses sur eux, vous devez choisir d'utiliser TCP ou gérer réordonnement en utilisant un numéro de séquence géré par vos programmes ..

8

Cela dépend du système d'exploitation. Bien que vous n'ayez pas spécifié de système d'exploitation, ce n'est pas important de toute façon. Pour rester portable, vous devez toujours anticiper que vos prises de datagramme reçoivent des données hors service.

+0

+1 pour le bit d'anticipation. –

2

Bien que vous exécutiez localhost, vous vous attendez à ce que les datagrammes UDP soient hors séquence dans le déploiement réel.

Si vous en avez besoin en séquence, essayez TCP.

0

UDP n'est pas spécifié pour préserver l'ordre, comme les affiches ci-dessus tous ont dit, mais s'il n'y a pas de routeurs intermédiaires je soupçonnerais aussi un bug dans votre code.

+7

Nah. C'est probablement dû au traitement de paquets multiprocesseur. –

+0

S'il vous plaît expliquer ce commentaire. – EJP

+14

Wow, viens de remarquer ce commentaire. Vous n'avez pas marqué mon nom, donc pas de notification. Quoi qu'il en soit: les systèmes d'exploitation qui accélèrent la gestion des paquets en répartissant le travail sur plusieurs cœurs peuvent avoir traité les paquets UDP sur différents cœurs et les avoir placés dans la file d'attente de lecture de l'application dans le désordre. –