如何防止Advantage Database连接超时?

时间:2013-02-08 18:03:42

标签: delphi advantage-database-server

我有一个与优势数据库配合使用的Windows服务,偶尔会进行一些http调用。在极少数情况下,这些电话可能会很长。调整我的数据库连接超时。我没有使用数据模块或任何东西。只需手动创建连接。

我的主要问题是,如果我暂时没有使用它,通常会阻止连接超时? TAdsComponents是否会以某种方式发送在后台调用的保持活动消息?这是依赖于vcl所以我在服务中没有这个吗?不知何故,我觉得创建一个线程来进行我的http调用,并且在主线程中检查它每隔几秒钟完成一次会阻止连接死亡。这是真的吗?

1 个答案:

答案 0 :(得分:6)

是的,有一个预期的keepalive机制。客户端(对于所有通信类型,TCP,UDP,共享内存)每隔一段时间向服务器发送一次“ping”,以使服务器知道连接仍然存在。 keepalive ping的频率基于服务器配置参数CLIENT_TIMEOUT。使用默认设置,我相信keepalive ping每30秒发送一次。

keepalive逻辑在一个单独的线程中运行,该线程由处理通信的代码启动。换句话说,它不依赖于任何VCL组件;如果你有连接到服务器,那么该线程应该正在运行。

检查连接是否超时的一种方法是查看Advantage错误日志。对应于超时连接应该有7020个错误。

可能会导致超时连接的一些事情包括:

  • 由于某种原因暂停客户端进程,因此keepalive线程无法运行。这似乎不太可能。
  • keepalive线程因某种原因被杀死。这似乎也不太可能;你必须不遗余力地实现这一目标。
  • 如果一段时间没有活动,防火墙可能会关闭连接。不过,我认为30秒的间隔足以防止这种情况发生。
  • 防火墙可能会禁止UDP keepalive数据包。防火墙本质上是对UDP数据包的“可疑”。您可以确保使用TCP / IP。