【发布时间】:2014-08-07 02:24:08
【问题描述】:
我一直在使用 HTTP 服务器 (TIdHTTPServer) 处理 OnCommandGet 事件。我刚刚创建了TIdServerContext 的继承对象并覆盖了它的构造函数和析构函数。现在,我想将我的数据库连接从之前的自定义会话对象移动到这个上下文线程中。服务器的KeepAlive 属性已启用。
目标是回收每个会话中实现的数据库连接。目前每个请求都会产生一个新的 ADO 连接,我想避免这种情况。我理解KeepAlive 并不一定意味着整个登录/注销会话,而只是保持持续连接以节省资源。
我的问题是,我应该如何利用我继承的TIdServerContext 对象来维护它自己的一致数据库连接 (TADOConnection) - 每个请求都可以使用它(在 COM 规则中 (CoInitialize))?
我假设我在OnCommandGet 事件处理程序中放置的任何代码都在与继承的TIdServerContext 相同的线程上下文中运行 - 这是正确的吗?本质上是……在同一个线程和COM中同时使用TIdServerContext.OnRun和TIdHTTPServer.OnCommandGet安全吗?
【问题讨论】:
标签: multithreading delphi ado indy10 httpserver