delphi - 如何防止 Advantage 数据库连接超时?

标签 delphi advantage-database-server

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

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

最佳答案

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

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

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

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

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

关于delphi - 如何防止 Advantage 数据库连接超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14778658/

相关文章:

delphi - 使用sql语句insert into将blob文件写入数据库

advantage-database-server - 如何在时间戳字段中插入硬编码值

delphi - 在Advantage Table中重现表锁定错误

sql-server - 找不到用于定位的行?

sqlite - SQLite数据库的Delphi Xe5 firedac数据库锁定错误

delphi - 灰色的 TWebBrowser 控件

delphi - 没有参数化 TFormatSettings 的 StrToDate() 是否应该抛出 AV?

delphi - 如何允许 TDBGrid 中的查找字段存在空白值?

.net - Delphi 与 .NET 的互操作性