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
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.
Vous pouvez utiliser select()
pour tester si les données entrantes sont disponibles.
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.
- 1. tcp message incomplet
- 2. TCP: comment éviter un message chevauchement
- 3. Garder 1000 connexions tcp ouvertes malgré quelques communications réelles (10/20)
- 4. Communications Bluetooth avec C#
- 5. Composant .NET Communications
- 6. problème avec l'écriture TCP socket dans l'objectif c (message d'erreur)
- 7. Recommandation pour le modificateur de message TCP/IP
- 8. Déterminer si un message sur tcp a été livré
- 9. Comment créer un message à partir de segments tcp
- 10. Comment préfixer la longueur du message dans TCP/IP
- 11. C# Blocage des communications par socket asynchrone
- 12. C#: Communications découplées entre applications
- 13. Comment déployer l'API Java Communications
- 14. Communications SSLv3 en Objective-C
- 15. Windows Communications Foundation Simple Début
- 16. Communications bidirectionnelles dans .Net remoting
- 17. Ajout d'une couche TLS/SSL aux communications ..?
- 18. ibatis + GlassFish: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Lien Communications échec
- 19. Connexions TCP simultanées TCP du même navigateur
- 20. Client TCP Callback asynchrone
- 21. TCP Freezing avec VB.NET
- 22. Quels protocoles TCP sont utilisables pour la communication client-client?
- 23. TCP Client Connection
- 24. Client TCP C# pour WM6
- 25. recevoir le message du port dans la connexion TCP en utilisant C#
- 26. programme client-serveur, problème d'envoi du message du client au serveur et inversement en utilisant TCP
- 27. Envoi d'un message xml en pièces via un socket TCP en utilisant Qt
- 28. Groovy Tcp client/serveur envoi de cartes
- 29. Fermeture d'une connexion TCP/client
- 30. Numéro de client du serveur TCP
+1. UDP serait un meilleur choix ici. Peut-être que l'OQ utilisait simplement "TCP" comme synonyme (malheureux) de "sockets". –
Merci pour votre réponse. Je mesure la latence en particulier pour la connexion tcp. – leo