2010-11-22 8 views
1

hi Je souhaite utiliser la connexion tcp pour envoyer/recevoir des messages. La question est que je veux envoyer beaucoup de messages et mesurer les latences. Ainsi, je ne veux pas recevoir après chaque message envoyé. Cependant, si je ne gère pas les messages entrants à temps, le programme obtient toujours des résultats inattendus. Est-il possible que je puisse gérer recv() sans bloquer mon programme d'envoi de msg? Tous les commentaires seraient appréciés.tcp message communications

Répondre

2

La mesure de la latence à l'aide de TCP n'est peut-être pas l'idée optimale, car TCP introduit nécessairement la latence (voir Nagle's algorithm). TCP est conçu comme un flux d'octets, il n'a même pas une idée bien définie de "messages".

Vous pouvez définir le socket sur non-blocking, ce qui entraînera le retour immédiat de recv() s'il n'y a pas de données. Si vous ne voulez pas gaspiller le processeur en interrogeant, vous pouvez utiliser select() pour détecter si le socket a des données disponibles pour la lecture.

+0

+1. UDP serait un meilleur choix ici. Peut-être que l'OQ utilisait simplement "TCP" comme synonyme (malheureux) de "sockets". –

+0

Merci pour votre réponse. Je mesure la latence en particulier pour la connexion tcp. – leo

0

Vous pouvez utiliser select() pour tester si les données entrantes sont disponibles.

0

Une option que je n'ai pas vu mentionnée ici serait d'utiliser un fil spearate pour recevoir. De cette façon, vous pouvez faire votre simple attente de blocage muet sans interférer (beaucoup) avec votre logique d'envoi dans l'autre thread.

Questions connexes