我正在使用 beanstalkd 将一些工作卸载到其他机器上。设置有点不寻常,服务器在互联网上(公共 ip),但消费者在某些人家中的 adsl 线路后面。所以有一个 linux 服务器作为客户端,通过一个动态 ip 出去并连接到服务器以获得工作。这都是 PHP,我正在使用 pheanstalk 库。
一切顺利运行了一段时间,但随后adsl更改了IP(每24小时提供商强制断开重新连接)客户端只是挂起,永远不会超出“保留”。
我认为对储备设置超时会有所帮助,但事实并非如此。看起来,客户端发出命令并阻止,它从不检查超时。它只是发出一个带有超时的保留(而不是简单的保留),并且服务器有责任在超时发生时返回一个 TIME_OUT。问题是,连接断开了(但 TCP/IP 直到任何一方尝试与另一方交谈才知道这一点),如果客户端阻止读取,它将永远不会返回。
该库似乎支持某种本地超时(例如尝试连接到服务器时),但它似乎没有考虑这种情况。
我怎样才能检测到陈旧的连接并强制重新连接?协议(以及 pheanstalk 本身)上是否有某种保活?
谢谢!