Je suis en train de refactoriser un écouteur UDP de Java vers C. Il doit gérer entre 1000 et 10000 messages UDP par seconde, avec une longueur de données moyenne d'environ 60 octets. Il n'y a pas de réponse nécessaire. Les données ne peuvent pas être perdues (ne demandez pas pourquoi UDP a été décidé).Benchmarking d'un serveur UDP
Je sors d'un processus pour traiter les données entrantes afin que je puisse recvfrom aussi rapidement que possible - sans remplir mes tampons de noyau. L'enfant traite ensuite les données reçues.
En bref, mon algo est:
Reçoit les données.
Lorsque des données sont reçues, vérifiez les erreurs.
Enfourchez un enfant.
Si je suis un enfant, faites ce que je avec les données et quittez.
Si je suis un parent, récolter des enfants zombie waitpid(-1, NULL, WNOHANG)
.
Répéter.
Tout d'abord, des commentaires à propos de ce qui précède? Je crée le socket avec socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
, liaison avec AF_INET
et INADDR_ANY
et recvfrom
sans indicateurs. Deuxièmement, quelqu'un peut-il suggérer quelque chose que je peux utiliser pour tester que cette application (ou au moins l'auditeur) peut gérer plus de messages que ce que j'attends? Ou, aurais-je besoin de pirater quelque chose ensemble pour le faire.
Je suppose que ce dernier serait meilleur, de sorte que je puisse comparer les données qui sont générées par rapport aux données reçues. Mais, les commentaires seraient appréciés.