• indy10的idhttpServer应答字符串


    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发送大字符串无须担心什么。

  • 相关阅读:
    分布式事务之可靠消息
    分布式事务之本地消息表
    分布式事务
    数据库之 事务
    WePY开发小程序(二):项目入口及注册页面、组件
    WePY开发小程序(一):入门
    vue学习笔记-事件监听
    vue学习笔记-列表渲染
    vue学习笔记-缩写
    vue学习笔记-常用指令
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/10265227.html
Copyright © 2020-2023  润新知