如何在Python中检查连接是否仍然有效?

2024-04-25 18:02:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试建立一个服务器,多个客户端可以连接到,但我遇到了一个问题。我有一个包含所有当前连接目标的列表,我想检查它们是否仍然存在,而不必手动连接到它们。你知道吗

这是我编写的类中的listener方法:

def listenForConnections(self):
        self.s.bind((self.HOST, self.PORT)) 
        while True:
            self.s.listen(128)
            c, addr = self.s.accept()
            self.c = c
            print("\n[+]Got a new connection!")
            self.conns.append(c)

如您所见,它将一个新的连接对象附加到一个列表中,然后您可以从该列表中使用getTarget()方法从同一个类中选择一个目标,但我不会将其粘贴到这里,因为您可能知道它的外观。请记住,侦听器在单独的线程中运行。现在我想写一个ping()函数,每隔几秒钟检查一次,如果conns列表中的所有连接都还活着,但是我不知道怎么做。我认为在ping方法中,我必须每隔几秒钟向客户端发送一些数据,但我担心这会破坏整个程序,因为客户端可能认为这是用户发送的有效命令,而不是检查连接是否存在的垃圾。你知道吗


Tags: 方法self服务器host客户端目标列表bind
1条回答
网友
1楼 · 发布于 2024-04-25 18:02:01

如果您想使用PING消息来检测客户机是否仍处于活动状态,那么必须在客户机/服务器协议中提供这一点。正如您已经提到的,客户机必须能够看到它是PING消息而不是“正常”消息。只有在可以更改客户机/服务器协议的情况下,这才有效。如果客户机/服务器协议严格地基于请求/响应,那么这将更难实现,因为现在服务器也可以启动消息。你知道吗

还有其他选择:

  • 如果客户机正确关闭连接,服务器可以在下次尝试与客户机通信时确定这一点。你知道吗
  • 如果客户机通常连续发送请求,则可以假设客户机已死亡,如果客户机有一段时间没有发送新请求,则关闭连接。你知道吗
  • 您可以使用TCP/IP keepalive来检测死客户机。你知道吗

相关问题 更多 >