为了好玩,我一直在尝试用 python 编写负载均衡器,并试图找出最好的(正确的?)方法来测试端口是否可用并且远程主机是否仍然存在。
我发现,一旦连接,就很难判断远程主机何时关闭。我已经打开了保持活动状态,但是即使在设置了各种 TCP_KEEPALIVE 之后,它也无法在一分钟内识别出故障连接(我意识到轮询的频率超过一分钟可能有点过分了,但可以说我想这样做)选择最低。
当我使用非阻塞套接字时,我注意到 recv() 从活动套接字读取时会返回错误(“资源暂时不可用”),但从死套接字读取时会返回“”(发送和接收为 0字节,这可能是原因?)。不过,这似乎是一种奇怪的测试它是否已连接的方法,并且在发送一些数据之后无法判断连接是否死亡。
除了每次检查都连接/断开连接之外,我还能做些什么吗?我可以手动发送 tcp keepalive,还是可以建立一个较低级别的连接,让我在不发送远程服务器可能处理的真实数据的情况下测试连接?