2010-06-10 7 views
0

Je suis dans une situation où je dois gérer plusieurs flux UDP actifs dans le serveur.plusieurs ports UDP

J'ai deux options (comme je le pense)

seul socket: 1) Écouter au seul port sur le serveur et recevoir les données de tous les clients sur le même port et créer des threads pour chaque client pour traiter la données jusqu'à ce que le client cesse d'envoyer. Ici, un seul port est utilisé pour recevoir les données et le nombre de threads utilisés pour traiter les données. 2) Le client demandera le port ouvert du serveur pour envoyer les données et l'application enverra le port ouvert au client et ouvrira un nouveau thread écoutant au port pour recevoir et traiter les données. pour chaque client aura un port unique pour envoyer les données.

J'ai déjà implémenté un moyen de savoir quel paquet provient de quel client en UDP.

J'ai plus de 1000 clients et 60 Ko de données par seconde que je reçois.

Y at-il des problèmes de performance en utilisant les méthodes ci-dessus

ou est là une manière efficace de gérer ce type de tâche en C?

Merci,

Raghu

Répondre

0

Avec que de nombreux clients, ayant un thread par client est très inefficace car beaucoup et beaucoup de changements de contexte doivent être effectués. De plus, le nombre de ports que vous pouvez ouvrir par IP est limité (le port est un nombre de 16 bits).

Par conséquent "Single Socket" sera beaucoup plus efficace. Mais vous pouvez également utiliser "Multipe Sokets" avec un seul thread en utilisant l'API asynchrone. Si vous pouvez identifier le client en utilisant la charge utile du paquet, il n'est pas nécessaire d'avoir un port par client.