【问题标题】:How do I keep Advantage Database connections from timing out?如何防止 Advantage Database 连接超时?
【发布时间】:2013-02-08 18:03:42
【问题描述】:

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

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

【问题讨论】:

  • 您是否在供应商论坛或他们的支持上询问过?

标签: delphi advantage-database-server


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 2014-11-21
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    相关资源
    最近更新 更多