如何在Python中检查连接是否仍然有效?
我一直在尝试制作一个多个客户端都可以连接的服务器,但我遇到了一个问题。我有一个包含所有当前连接目标的列表,我想检查它们是否仍然存在,而不必手动连接到它们 这是我编写的类中的侦听器方法:如何在Python中检查连接是否仍然有效?,python,sockets,connection,Python,Sockets,Connection,我一直在尝试制作一个多个客户端都可以连接的服务器,但我遇到了一个问题。我有一个包含所有当前连接目标的列表,我想检查它们是否仍然存在,而不必手动连接到它们 这是我编写的类中的侦听器方法: def listenForConnections(self): self.s.bind((self.HOST, self.PORT)) while True: self.s.listen(128) c, addr = self.s.
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方法中,我必须每隔几秒钟向客户端发送一些数据,但我担心这会破坏整个程序,因为客户端可能认为这是用户发送的有效命令,而不是检查连接是否活动的垃圾。如果要使用ping消息来检测客户机仍然处于活动状态,那么您必须在客户机/服务器协议中对此进行规定。正如您已经指出的,客户端必须能够看到它是一条PING消息,而不是一条“正常”消息。仅当您可以更改客户机/服务器协议时,此选项才有效。如果客户机/服务器协议严格基于请求/响应,那么这将更难实现,因为现在服务器也可以启动消息 还有其他选择:
- 如果客户端正确关闭连接,服务器可以在下次尝试与客户端通信时确定这一点
- 如果客户机通常连续发送请求,则可以假定客户机已死亡,并在客户机有一段时间未发送新请求时关闭连接
- 您可以使用来检测死机客户端