我正在实现一个简单的服务器,如果 3 秒内没有收到任何消息,它应该打印一条消息。
处理程序
class SingleTCPHandler(SocketServer.StreamRequestHandler):
def handle(self):
while True:
message = self.rfile.readline().strip()
print message
服务器
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)
这里我扩展了 TCPServer 来测试超时方法。 我已将 timeout 属性设置为 3。根据文档,如果时间过去并且没有消息发送到客户端 handle_timeout() 被调用,在我的例子中,它只是打印“超时”。
BaseServer.timeout
Timeout duration, measured in seconds, or None if no timeout is desired. If handle_request() receives no incoming requests within the timeout period, the handle_timeout() method is called.
我启动服务器,并观察它的输出。当我连接到它并发送一些消息时,它们通常会被打印出来。但是,如果我在 3 秒或更长时间内没有发送任何内容,则什么也不会发生。好像 timeout 和 handle_timeout() 还没有实现。
这种行为的根源是什么?
请您参考如下方法:
您不得为应用程序循环调用 server_forever() 方法。 试试这个:
while True:
self.handle_request()
handle_timeout() 对我有用。
