indy10的idhttpServer應答字符串
阿新 • • 發佈:2019-01-14
rep ted fst byte pro flush rect dir delphi
indy10的idhttpServer應答字符串
先看應答字符串的代碼:
procedure TIdIOHandler.Write(const AOut: string; AByteEncoding: IIdTextEncoding = nil {$IFDEF STRING_IS_ANSI}; ASrcEncoding: IIdTextEncoding = nil{$ENDIF} ); begin if AOut <> ‘‘ then begin AByteEncoding := iif(AByteEncoding, FDefStringEncoding); {$IFDEF STRING_IS_ANSI} ASrcEncoding := iif(ASrcEncoding, FDefAnsiEncoding, encOSDefault); {$ENDIF} Write( ToBytes(AOut, -1, 1, AByteEncoding {$IFDEF STRING_IS_ANSI}, ASrcEncoding{$ENDIF} ) ); end; end;
從代碼可以看出,發送字符串,最終是將字符串轉為TidBytes,發送的。
再跟一下發送TidBytes的代碼:
procedure TIdIOHandler.Write(const ABuffer: TIdBytes; const ALength: Integer = -1; const AOffset: Integer = 0); var LLength: Integer; begin LLength := IndyLength(ABuffer, ALength, AOffset); if LLength > 0 then begin if FWriteBuffer = nil then begin WriteDirect(ABuffer, LLength, AOffset); end else begin // Write Buffering is enabled FWriteBuffer.Write(ABuffer, LLength, AOffset); if (FWriteBuffer.Size >= WriteBufferThreshold) and (WriteBufferThreshold > 0) then begin repeat WriteBufferFlush(WriteBufferThreshold); until FWriteBuffer.Size < WriteBufferThreshold; end; end; end; end;
大的BUF,會分成N次陸續發送。所以INDY發送大字符串無須擔心什麽。
indy10的idhttpServer應答字符串