2013-02-08 47 views
3

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

我的主要问题是,如果我刚刚没有使用它,通常会阻止连接超时? TAdsComponents是否发送在后台被调用的保持活动消息?这是依赖于VCL,所以我没有在我的服务?不知何故,我觉得创建一个线程来做我的HTTP调用,并在主线程检查它每隔几秒完成将阻止连接死亡。这是真的吗?

+0

您是否在供应商的论坛或其支持问过? – RobertFrank 2013-02-08 18:22:48

回答

6

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

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

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

浮现在脑海中,可能导致超时连接有些事情包括:

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