如何防止Advantage Database连接超时?

Eri*_*c G 3 delphi advantage-database-server

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

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

Mar*_*ins 6

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

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

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

一些可能导致超时连接的想法包括:

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