我想使用SocketServer模块为服务器的请求处理程序中的各个连接添加超时。

首先,这是我第一次尝试使用Python进行网络编程。我将SocketServer.BaseRequestHandler和SocketServer.ThreadingTCPServer和SocketServer.TCPServer分为子类,并设法创建了两个具有一些基本线程TCP功能的类。

但是我希望传入的连接超时。尝试覆盖任何内置的SocketServer超时值和方法均无效,因为该文档说这仅适用于分叉服务器。我设法创建了一个计时器线程,该计时器线程在X秒后触发,但是由于Handler线程中的recv调用阻塞的性质,这没有用,因为我会被迫杀死它,这是我真正的想法想避免。

因此,根据我的理解,我需要一个异步实现,在此我会收到通知并读取一定数量的数据。如果在5秒钟内没有数据发送,可以说,我想关闭该连接(我知道该怎么做)。
我发现了一些在套接字上使用异步的示例,但没有使用SocketServer的示例。那么,如何实现asyncore和threadingTCPserver呢?
可能吗?
有人做过吗?

最佳答案

您还可以在recv调用上设置超时,如下所示:

sock.settimeout(1.0)


由于使用SocketServer,因此必须在socket中的某个位置找到基础SocketServer。请注意,SocketServer将为您创建套接字,因此您无需自己这样做。

您可能已经定义了RequestHandlerSocketServer一起使用。它看起来应该像这样:

class RequestHandler(SocketServer.BaseRequestHandler):
    def setup(self):
         # the socket is called request in the request handler
         self.request.settimeout(1.0)

    def handle(self):
         while True:
             try:
                 data = self.request.recv(1024)
                 if not data:
                      break # connection is closed
                 else:
                      pass  # do your thing
             except socket.timeout:
                 pass # handle timeout

08-16 21:29