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 秒或更长时间没有发送任何内容,则什么也不会发生。好像timeout和handle_timeout()尚未实施。
这种行为的根源是什么?
您不得为应用程序循环调用 server_forever() 方法。试试这个:
while True:
self.handle_request()
Run Code Online (Sandbox Code Playgroud)
handle_timeout() 对我有用。