Multithreading Delphi/Indy多线程服务器
我正在尝试将我的应用程序转为多线程。我想要实现的是: -通过TidHTTPServer接收命令 -执行本地操作(可能涉及使用TIDWTTP向其他服务发送/接收数据) -将执行结果返回给原始调用者 由于我对多线程技术相当陌生,我想知道我的设计思想是否正确Multithreading Delphi/Indy多线程服务器,multithreading,delphi,indy,Multithreading,Delphi,Indy,我正在尝试将我的应用程序转为多线程。我想要实现的是: -通过TidHTTPServer接收命令 -执行本地操作(可能涉及使用TIDWTTP向其他服务发送/接收数据) -将执行结果返回给原始调用者 由于我对多线程技术相当陌生,我想知道我的设计思想是否正确 TMsgHandler=Class(TThread) 在TidHTTPServer.OnCommandGet中,我创建了一个新的TMsgHandler实例,并传递了ARequestInfo和AResponseInfo TMsgHandler。对数
THTTPServer
是一个多线程组件。它的OnCommand…
事件在Indy为您创建的工作线程上下文中激发
因此,您不需要从
TThread
派生TMsgHandler
。直接在OnCommand…
线程的上下文中执行TIdHTTP
。在事件处理程序退出之前,不会将响应发送回客户端(除非手动发送)。但是,您不应该从主线程共享一个TIdHTTP
(除非您绝对需要,在这种情况下,您需要同步对它的访问)。您应该根据需要直接在OnCommand中动态创建一个新的TIdHTTP
。
/TMsgHandler
代码。好的,谢谢。因为我正在访问的服务需要OAuth,所以我想在开始时初始化连接,并使用那些经过身份验证的套接字…:-/当然,我可以将令牌从OnCommand传递到线程中。。。好的,谢谢你的开始指导。我将看到我的结局。:-)@WolfgangBures您至少可以将TIdHTTP
对象汇集在一起,并根据需要将它们分发给OnCommand…
线程,然后在完成后将它们放回池中。只要确保池是线程安全的。