Sql DataSnap服务器-每个客户端请求共享数据库连接还是新连接?

Sql DataSnap服务器-每个客户端请求共享数据库连接还是新连接?,sql,delphi,rest,ado,datasnap,Sql,Delphi,Rest,Ado,Datasnap,我有一个Delphi XE2 DataSnap服务器(Windows服务)连接到后端MS SQL server 2008(同一服务器盒),为REST客户端请求提供服务。 一段时间以来,一切都很好,直到最近,我遇到了一个问题,由于某种原因,DataSnap服务与SQL Server失去了连接 该服务无法重新建立连接,我必须重新启动DataSnap服务才能继续。 这引起了我的思考,因为目前该服务仅为所有客户端请求使用1个共享的SQL连接(TADOConnection)。我这样做是因为我不想为每个客户

我有一个Delphi XE2 DataSnap服务器(Windows服务)连接到后端MS SQL server 2008(同一服务器盒),为REST客户端请求提供服务。
一段时间以来,一切都很好,直到最近,我遇到了一个问题,由于某种原因,DataSnap服务与SQL Server失去了连接

该服务无法重新建立连接,我必须重新启动DataSnap服务才能继续。
这引起了我的思考,因为目前该服务仅为所有客户端请求使用1个共享的SQL连接(TADOConnection)。我这样做是因为我不想为每个客户机请求实例化一个新的SQL连接


我正在考虑是否为每个请求提供一个单独的SQL连接会更好,以及开销是否会很明显-有人能对此发表评论/建议吗?

这是一个构造良好的数据访问层,可以修改它以尝试不同的方法,并将您的db连接与其他请求隔离开来你的代码真的很有用

如果从客户端到DataSnap服务器使用MIDAS(DataSnap),强烈建议使用池方法(正如mjn所建议的),因为我发现它有很大的连接开销

我构建了一些在运行时使用普通TADOConnection的web服务(流量相当低),并且发现建立数据库连接的开销可以忽略不计,当然与从设备到服务器以及从服务器到服务器的整个网络延迟相比。

如果您发现TADOConnection在高流量环境中仍然会带来太多开销,您可以轻松地将您自己的连接池如上所述添加到这样的系统中。

多线程服务器应用程序中一种非常流行的技术是使用数据库连接池,它提供了许多预配置的、随时可用的连接。高级实现还可以验证数据库服务器是否仍然可以访问,通常使用pingsql语句。当然,这完全取决于您有多少客户端请求。你们是在阅读还是在更新数据库?如果没有太多的请求,我会为每个客户机在运行时实例化自己的SQL连接。在这种情况下,无论出于何种原因,您都不必担心与数据库的连接丢失。我想数据库连接是通过tcp的吧?但REST是无状态的。在这种情况下,如何为所有客户端请求共享数据库连接?你是在用临界区吗?可能您的问题与多线程问题有关。您好,非常感谢您的宝贵意见。自从写这个问题以来,我已经做了各种测试,完全同意与web调用本身的延迟相比,动态创建SQL连接的开销很小,从现在起我将采用这种方法。