【发布时间】:2012-07-26 08:42:35
【问题描述】:
我有一个 Delphi XE2 DataSnap 服务器(Windows 服务)连接到后端 MS SQL Server 2008(相同的服务器框)服务 REST 客户端请求。
一段时间以来一切都很好,直到最近,我遇到了一个问题,DataSnap 服务由于某种原因失去了与 SQL Server 的连接。
服务无法重新建立连接,我必须重新启动 DataSnap 服务才能继续。
这让我开始思考,因为目前该服务仅使用 1 个 SQL 连接 (TADOConnection) 共享给所有客户端请求。我这样做是因为我不希望为每个客户端请求实例化一个新的 SQL 连接的开销。
我正在考虑是否为每个请求建立一个单独的 SQL 连接实际上是否更好,并且开销是否明显 - 任何人都可以对此发表评论/建议吗?
【问题讨论】:
-
多线程服务器应用程序中一种非常流行的技术是使用数据库连接池,它提供了许多预配置的、即用型的连接。高级实现还可以验证数据库服务器是否仍然可以访问,通常使用 ping SQL 语句。
-
当然,这完全取决于您有多少客户请求。您是在阅读还是在更新数据库?如果没有多少请求,我会为每个客户端在运行时实例化自己的 SQL 连接。在这种情况下,无论出于何种原因,您都不会为失去与数据库的连接而烦恼。我想数据库连接是通过 tcp 的?但是 REST 是无状态的。在这种情况下,如何为所有客户端请求共享数据库连接?您是否为此使用关键部分?也许您的问题与多线程问题有关。
标签: sql delphi rest ado datasnap