gpt4 book ai didi

multithreading - Delphi/Indy IdHttpServer 不是多线程的?

转载 作者:可可西里 更新时间:2023-11-01 15:10:59 27 4
gpt4 key购买 nike

我使用的是 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;

注意 sleep 10 秒。

然后我使用 Firefox 测试,使用 2 个浏览器。我有第一个连接到“本地主机”,我立即听到哔声。然后我切换到第二个浏览器,并让它连接到本地主机(不到 10 秒),但它不会立即发出蜂鸣声。它等待第一个请求完成,然后发出蜂鸣声,并再等待 10 秒。

我以为这些组件是多线程的?是否有一些我可以设置的属性使其按照我认为的方式运行(两个请求都会立即得到答复)。

最佳答案

不是 Indy,TIdHTTPServer 对此行为负责!这是网络浏览器!

Firefox 为同一台服务器上的不同请求共享 TCP 连接。

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

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

关于multithreading - Delphi/Indy IdHttpServer 不是多线程的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/761582/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com