Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何防止Advantage数据库连接超时?_Delphi_Advantage Database Server - Fatal编程技术网

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

Delphi 如何防止Advantage数据库连接超时?,delphi,advantage-database-server,Delphi,Advantage Database Server,我有一个使用advantage数据库的Windows服务,偶尔会进行一些http调用。在极少数情况下,这些电话可能很长。我的数据库连接超时。我没有使用数据模块或任何东西。只是手动创建连接 我的主要问题是,如果我有一段时间没有使用它,通常是什么阻止连接超时?TAdsComponents是否会发送一条在后台被调用的保持活动的消息?这是否取决于vcl,所以我的服务中没有vcl?不知何故,我想创建一个线程来进行http调用,在主线程中每隔几秒钟检查一次是否完成,这样可以防止连接中断。这是真的吗?是的,正

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


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

是的,正如你所期望的,有一种保持活力的机制。客户端(对于所有通信类型,TCP、UDP、共享内存)每隔一段时间向服务器发送一次“ping”,让服务器知道连接仍然有效。keepalive ping的频率基于服务器配置参数CLIENT\u TIMEOUT。在默认设置下,我相信keepalive ping每30秒发送一次

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

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

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

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

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