Delphi/Indy 多线程服务器

Delphi/Indy multithreading Server

我正在尝试将我的应用程序变成多线程。我想要实现的是: - 通过 TidHTTPServer 接收命令 - 执行本地操作(可能涉及使用 tidHTTP 将 send/receive 数据传输到其他服务) - return执行结果给原调用者

由于我对多线程还很陌生,所以我想知道我的设计理念是否正确

  1. TMsgHandler=Class(TThread)
  2. 在 TidHTTPServer.OnCommandGet 我创建了一个新的 TMsgHandler 实例并传递了 ARequestInfo 和 AResponseInfo
  3. TMsgHandler.Excecute 解释数据
  4. 可以 TMsgHandler.Execeute 在我的 Main 中使用对象(TidHTTP 的后代)与其他服务通信吗?
  5. TMsgHandler 通过 AResponseInfo 发送应答并终止。

这行得通吗?

这不是正确的设计。

THTTPServer 是一个多线程组件。它的 OnCommand... 事件在 Indy 为您创建的工作线程的上下文中触发。

因此,您不需要从 TThread 中导出 TMsgHandler。改为直接在 OnCommand... 线程的上下文中执行 TIdHTTP。在您的事件处理程序退出之前,不会将响应发送回客户端(除非您手动发送)。但是,您不应该从主线程共享单个 TIdHTTP(除非您绝对需要,在这种情况下您需要同步访问它)。您应该根据需要直接在 OnCommand.../TMsgHandler 代码中动态创建一个新的 TIdHTTP