【问题标题】:Delphi TIdHTTP POST is very slow vs GETDelphi TIdHTTP POST 与 GET 相比非常慢
【发布时间】:2012-11-09 20:38:45
【问题描述】:

德尔福 2009

我最近从多个 GET 请求切换到单个 POST,我认为这会更有效,但结果却慢得多。它从 1-2 秒变为 8-10 秒,我不知道为什么。

例子

unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP;

type
  TForm4 = class(TForm)
    d: TIdHTTP;
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form4: TForm4;

implementation

{$R *.dfm}

procedure TForm4.Button1Click(Sender: TObject);
var m: tmemorystream;
    data: tstringlist;
    i: integer;
begin
  memo1.Clear;

  m:=tmemorystream.Create;
  data:=tstringlist.Create;
  data.Add(format('test1');
  data.Add(format('test2');

  d.Post('http://www.someurl.com/test.php', data, m);
  m.Position:=0;
  data.LoadFromStream(m);
  memo1.Lines.Add('Received:');

  for i := 0 to data.count - 1 do
    memo1.Lines.Add(data[i]);

  m.Free;
  data.Free;
end;

end.

在服务器上

<?php
echo "1\n";
?>

【问题讨论】:

  • 当“数据”只包含两个字符串或者你有更多的有效负载时,发布的代码执行速度会这么慢吗?
  • 生产代码中payload的字符串永远不会超过5个

标签: delphi http indy


【解决方案1】:

确保在TIdHTTP.HTTPOptions 属性中启用hoKeepOriginalProtocol 标志。默认情况下,TIdHTTP.Post() 在每次调用时都会强制关闭连接,无论是否使用 HTTP 保持活动,除非启用了该标志。断开连接和重新连接的额外开销可能会导致额外的时间。

【讨论】:

    【解决方案2】:

    我使用不同的 url 做了一个简单的测试:

    d.Post('http://whatismyip.org', data, m); // Using DNS name
    

    d.Post('http://54.242.203.46', data, m); // Using IP
    

    帖子耗时约 1 秒,所以我认为您的问题可能与 Indy 无关。我的建议:

    • 检查 PC 的 DNS 解析。试试用IP地址看看有没有区别;
    • 尝试使用外部工具(curl、vbscript 等)向同一站点发出 POST 请求并测量时间;
    • 使用网络监控工具(Wireshark、MS Network Monitor 等)查看服务器响应您的 POST 请求所需的时间,或者客户端在解析地址和实际的 Post 请求之间花费的时间。

    这些步骤可以缩小问题所在。

    如果这些都没有帮助 - 尝试将 Indy 升级到最新版本。

    【讨论】:

      猜你喜欢
      • 2021-02-13
      • 2017-05-07
      • 1970-01-01
      • 2012-08-23
      • 2015-01-27
      • 2014-09-06
      • 1970-01-01
      • 2019-07-26
      • 2013-06-09
      相关资源
      最近更新 更多