python - 监控一个tcp端口

标签 python tcp monitoring port

为了好玩,我一直在玩弄用 python 编写负载均衡器,并一直在尝试找到最好的(正确的?)方法来测试端口是否可用以及远程主机是否仍然存在。

我发现,一旦连接,就很难判断远程主机何时出现故障。我已经打开了保持事件状态,但无法让它在一分钟内识别出断开的连接(我意识到轮询频率超过一分钟可能有点矫枉过正,但可以说我想这样做),即使在设置了各种 TCP_KEEPALIVE选项降到最低。

当我使用非阻塞套接字时,我注意到 recv() 在从事件套接字读取时会返回错误(“资源暂时不可用”),但在从死套接字读取时返回“”(发送和recv 为 0 字节,这可能是原因?)。不过,这似乎是一种奇怪的测试连接的方法,并且无法判断连接是否在发送一些数据后 已断开。

除了为每次检查连接/断开连接外,我还能做些什么吗?我可以手动发送一个 tcp keepalive,还是可以建立一个较低级别的连接,让我在不发送远程服务器可能处理的真实数据的情况下测试连接?

最佳答案

我建议不要让您的(单个)测试套接字处于连接状态 - 每次需要轮询时都建立一个新连接。我见过的每个负载平衡器/服务器可用性系统都使用这种方法而不是持久连接。

如果远程服务器在合理的时间内(例如 10 秒)没有响应,则将其标记为“关闭”。使用计时器和信号而不是函数响应代码来处理超时。

关于python - 监控一个tcp端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/771399/

相关文章:

sockets - 当使用环回地址使用 TCP/IP 套接字执行 IPC 时,公共(public)网络堆栈是否会跳过在较低级别的 PDU 中构建消息的框架?

performance - Docker容器CPU使用率监控

python - pandas 矢量化查找,不推荐使用lookup()

python - 如何查找字符串的开头和结尾

python - 无法在 API 中显示产品图像

c++ - boost:asio::async_write:已发送数据但未调用处理程序

java - 网络 4 : high and low write watermarks

java - 监控关键系统上的文件系统访问

linux - 如何测量由于 Linux 中给定进程的事件而导致的净使用磁盘空间变化?

python - 自适应阈值---ValueError : too many values to unpack