Lo so, lo sto chiedendo un sacco di domande ... ma come un nuovo sviluppatore Delphi continuo a cadere tutte queste domande :)Indy Write Buffer/comunicazione TCP efficiente
Questo si occupa di comunicazione TCP utilizzando indy 10. Per rendere efficiente la comunicazione, codifico una richiesta di operazione client come un singolo byte (nella maggior parte degli scenari seguito da altri byte di dati, ovviamente, ma in questo caso solo un singolo byte). Il problema è che
var Bytes : TBytes;
...
SetLength (Bytes, 1);
Bytes [0] := OpCode;
FConnection.IOHandler.Write (Bytes, 1);
ErrorCode := Connection.IOHandler.ReadByte;
non invia quel byte immediatamente (almeno il gestore di esecuzione server non viene richiamato). Se cambio "1" in "9", ad esempio, tutto funziona correttamente. Ho supposto che Indy buffer i byte in uscita e provato a disattivare il buffer di scrittura con
FConnection.IOHandler.WriteBufferClose;
ma non ha aiutato. Come posso inviare un singolo byte e assicurarmi che sia inviato immediatamente? E - aggiungo un'altra piccola domanda qui - qual è il modo migliore per inviare un intero usando indy? Purtroppo non riesco a trovare funzione come WriteInteger nel IOHandler di TIdTCPServer ... e
WriteLn (IntToStr (SomeIntVal))
non sembra molto efficiente per me. Fa la differenza se uso più comandi di scrittura in una riga o raggruppo le cose in un array di byte e me lo invii una volta?
Grazie per eventuali risposte!
MODIFICA: Ho aggiunto un suggerimento che sto usando Indy 10 poiché sembrano esserci importanti cambiamenti riguardanti le procedure di lettura e scrittura.
Nota che l'invio di 1 byte non è più efficiente di inviare più byte. Probabilmente dovresti leggere su TCP/IP, dimensione del pacchetto, sovraccarico del trasferimento e tutto. C'è un motivo per cui la maggior parte dei vecchi protocolli Internet utilizza il testo, anche se la dimensione dei dati è maggiore rispetto ai dati binari. – mghie
Questo comando è un'eccezione. La maggior parte dei comandi aggiunge più byte per i parametri di comando. Pensavo che non fosse male mettere le cose il più vicino possibile. O sbaglio qui? – jpfollenius
Fintanto che il tuo data frame completo si adatta a un pacchetto TCP, non dovrebbe fare molta differenza. I protocolli basati su testo OTOH sono di grande aiuto quando si tratta di eseguire il debug di materiale. – mghie