Delphi/Indy IdHttpServer没有多线程?

9 delphi multithreading http indy

我正在使用Delphi 2006和Indy 10.我创建了一个表单并下载了一个IdHttpServer组件.我为表单设置OnCreate事件以将服务器设置为活动状态,然后为服务器的OnCommandGet输入以下行:

procedure TForm3.IdHTTPServerCommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
   Beep;
   Sleep(10000);
   AResponseInfo.ContentText := DateTimeToStr(Now);
end;
Run Code Online (Sandbox Code Playgroud)

注意睡眠10秒钟.

然后我用Firefox测试,使用2个浏览器.我有第一个连接到"localhost",我立刻听到一声哔哔声.然后我选择第二个浏览器,并将其连接到localhost(在不到10秒的时间内),但它不会立即发出哔声.它等待第一个请求完成,然后发出蜂鸣声,并等待另一个10秒.

我以为这些组件是多线程的?是否有一些我可以设置的属性使其表现得像我想象的那样(两个请求都会得到立即回答).

ulr*_*chb 11

不是Indy,并且TIdHTTPServer对这种行为负责!这是webbrowser!

Firefox在同一服务器上共享不同请求的TCP连接.

因此,Firefox序列化了对同一URI的2个请求.同时打开2个不同的浏览器(例如IE和Firefox),同时请求http://localhost/两者,您将获得预期的结果.

以及你问题的答案:是的,当然,每个TIdHTTPServer.OnCommandGet事件都在一个自己的"调度程序"线程中执行,并且可以同时执行.

  • 对,就是那样!我使用了Firefox和Internet Explorer,得到了预期的结果,非常感谢!我的代码中有一个显示相同行为的错误,所以当我看到Firefox也这样做时,我认为我的代码是完美的...... (2认同)