python 套接字服务器超时

The*_*eer 3 python sockets socketserver

我正在实现一个简单的服务器,如果 3 秒内没有收到任何消息,它应该打印一条消息。

处理程序

class SingleTCPHandler(SocketServer.StreamRequestHandler):
    def handle(self):
        while True:
            message = self.rfile.readline().strip()
            print message
Run Code Online (Sandbox Code Playgroud)

服务器

class SimpleServer(SocketServer.TCPServer):
    timeout = 3

    def handle_timeout(self):
        print "Timeout"

    def __init__(self, server_address, RequestHandlerClass):
        SocketServer.TCPServer.__init__(self, server_address, RequestHandlerClass)
Run Code Online (Sandbox Code Playgroud)

这里我扩展了TCPServer测试超时方法。我已将timeout属性设置为3. 根据文档,如果时间过去了并且没有消息发送到客户端,handle_timeout()则调用它,在我的情况下,只打印“超时”。

BaseServer.timeout

超时持续时间,以秒为单位测量,如果不需要超时,则为“无”。如果handle_request()在超时时间内没有收到传入请求,则调用handle_timeout()方法。

我启动服务器,并观察它的输出。当我连接到它并发送一些消息时,它们通常会被打印出来。但是,如果我 3 秒或更长时间没有发送任何内容,则什么也不会发生。好像timeouthandle_timeout()尚未实施。

这种行为的根源是什么?

mig*_*ghq 5

您不得为应用程序循环调用 server_forever() 方法。试试这个:

while True:
  self.handle_request()
Run Code Online (Sandbox Code Playgroud)

handle_timeout() 对我有用。