是的,正如您所料,有一个保活机制。客户端(对于所有通信类型,TCP、UDP、共享内存)每隔一段时间向服务器发送一个“ping”,让服务器知道连接仍然存在。该保活 ping 的频率基于服务器配置参数 CLIENT_TIMEOUT。使用默认设置,我相信每 30 秒发送一次 keepalive ping。
keepalive 逻辑在一个单独的线程中运行,该线程由处理通信的代码启动。换句话说,它不依赖于任何 VCL 组件;如果您有与服务器的连接,那么该线程应该正在运行。
检查连接是否超时的一种方法是查看 Advantage 错误日志。应该有与超时连接对应的 7020 错误。
想到的一些可能导致连接超时的事情包括:
- 客户端进程由于某种原因被挂起,导致 keepalive 线程无法运行。这似乎不太可能。
- 由于某种原因,keepalive 线程被杀死。这似乎也不太可能;你必须竭尽全力才能做到这一点。
- 如果一段时间内没有活动,防火墙可能会关闭连接。不过,我认为 30 秒的间隔足以防止这种情况发生。
- 防火墙可能不允许 UDP keepalive 数据包。防火墙本质上对 UDP 数据包是“可疑的”。您可以确保您使用的是 TCP/IP。