我需要编写一个多线程HTTP服务器。我知道Indy通过IdThreadMgrPool处理线程。
我的要求很简单:拥有一台服务器,该服务器可以接受多个并发客户端(Web浏览器POST请求),运行有限数量的调用Delphi DLL的线程(可能与连接线程分开),并返回结果。
无阻塞将是最终的选择(例如node.js)。
关于此主题有几篇SO帖子。我在这里(或通过Google)找不到的是如何使用IdThreadMgrPool的示例。我看到有帖子说必须使用它,但没有示例显示如何使用。在Indy的网站上也没有任何示例。
有人可以指出一个例子吗?还是有一个FOS框架对此适用?
一种想法是让Indy正常产生多个线程,然后让这些线程访问运行DLL的受控线程池。如果这是合理的话,那么我只需要知道“正常”案例用法示例即可。
如果您有Windows服务器,我建议使用Delphi 7编写ISAPI DLL并将其部署在IIS上,这将处理所有服务器端问题,尤其是如果您具有带有IIS 7.5(或更高版本)的Server 2008 R2。您的客户端可以使用Indy连接到IIS,并且Indy客户端与Delphi ISAPI的请求/响应模型相结合,支持多种功能,可以轻松地将数据从客户端传递到服务器端请求处理程序,再传递回客户端。无需ASP.NET-所有本机Delphi和“经典” ISAPI应用程序模型。
Delphi 7将生成ISAPI应用程序代码-当IIS将请求发送到DLL时,您将获得一个动作编辑器来处理请求,该请求由客户端发送的URL决定。您可以保留会话信息,创建全局缓存,并且在ISAPI DLL的上下文中,基本上可以使用VCL的所有非可视方面。
IIS处理线程-可能处理的并发连接远远超出您的需要-并且还使您能够确定一次可以加载DLL的实例数量,以及许多其他选项,例如回收,各种形式的身份验证和安全级别。您可以使用IIS的应用程序池功能进行扩展等。
我已经使用这种体系结构开发了几种大型企业级解决方案(Delphi exe中嵌入了Indy客户端)。一旦掌握了Delphi的ISAPI应用程序模型的基础知识和IIS部署的缺陷,它就会变得稳定且相对“轻松”。
如果您有此选项,为什么还要重新发明轮子呢?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句