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