Indy Écrire de mise en mémoire Tampon / Efficacité de la communication TCP

Je sais, je pose beaucoup de questions...mais comme un nouveau développeur delphi, je continue de tomber sur toutes ces questions 🙂

Il s'agit de la communication TCP à l'aide d'indy 10. Pour rendre la communication efficace, j'ai le code d'un client demande d'opération à un seul octet (dans la plupart des cas, suivis par les autres octets de données de cours, mais dans ce cas, un seul octet). Le problème est que

var Bytes : TBytes;
...
SetLength (Bytes, 1);
Bytes [0] := OpCode;
FConnection.IOHandler.Write (Bytes, 1);
ErrorCode := Connection.IOHandler.ReadByte;

ne pas envoyer l'octet immédiatement (au moins les serveurs exécuter le gestionnaire n'est pas invoquée). Si je change de '1' à '9' par exemple, tout fonctionne bien. Je suppose que Indy tampons sortant octets et a essayé de désactiver l'écriture de la mise en mémoire tampon avec

FConnection.IOHandler.WriteBufferClose;

mais il n'a pas aidé. Comment puis-je envoyer un seul octet et assurez-vous qu'il est immédiatement envoyé? Et - je ajouter une autre petite question ici - ce qui est le meilleur moyen d'envoyer un nombre entier à l'aide d'indy? Malheureusement je ne trouve pas de fonction comme WriteInteger dans le IOHandler de TIdTCPServer...et

WriteLn (IntToStr (SomeIntVal))

semble pas très efficace pour moi. Cela fait-il une différence si je utiliser plusieurs commandes d'écriture dans une ligne ou d'emballer les choses ensemble dans un tableau d'octets et de l'envoyer en une fois?

Merci pour toute les réponses!

EDIT: j'ai ajouté un soupçon que je suis à l'aide d'Indy 10, puisqu'il semble y avoir des changements importants concernant la lecture et l'écriture des procédures.

Notez que l'envoi d'1 octet n'est pas plus efficace que l'envoi de plusieurs octets. Vous devriez lire sur TCP/IP, la taille de paquet de transfert de frais généraux et tout et tout. Il y a une raison, la plupart des anciens protocoles de l'internet l'utilisation du texte, même si la taille des données est plus grande qu'avec des données binaires.
Cette commande est une exception. La plupart des commandes ajouter plus d'octets pour les paramètres de la commande. J'ai pensé qu'il ne pouvait pas être mauvais pour emballer les choses le plus près possible. Ou je me trompe ici?
Aussi longtemps que votre bloc de données s'inscrit dans un paquet TCP, il ne devrait pas faire beaucoup de différence. Le texte des protocoles basés sur otoh, que sont d'une grande aide quand il s'agit de débogage de trucs.
J'ai posté une question dans le stackoverflow.com/questions/2440926/... qui peuvent être liés d'une certaine façon, alors j'ai pensé que je voudrais mentionner ici au cas où quelqu'un a vu quelque chose de semblable.

OriginalL'auteur jpfollenius | 2009-03-03