Delphi / Indy多线程服务器

 2021-04-26 

Delphi/Indy multithreading Server

我正在尝试将我的应用设置为多线程。我想要实现的是:
-通过TidHTTPServer接收命令
-执行本地操作(可能涉及使用tidHTTP向其他服务发送/接收数据)
-将执行结果返回给原始调用方

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

  • TMsgHandler = Class(TThread)
  • 在TidHTTPServer.OnCommandGet中,我创建TMsgHandler的新实例并传递ARequestInfo和AResponseInfo
  • TMsgHandler.Excecute插入数据
  • TMsgHandler.Execeute可以在我的Main中使用对象(TidHTTP的后代)与其他服务进行通信吗?
  • TMsgHandler通过AResponseInfo发送答案并终止。
  • 这可以工作吗?


    这不是正确的设计。

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

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