Skip to main content
 首页 » 编程设计

python 套接字服务器超时

2025年05月04日1052php

我正在实现一个简单的服务器,如果 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() 对我有用。